手册页在这里:http://man.cat-v.org/unix-6th/3/ttyn
这个例子:
if (ttyn(0) = 'x'){
...
}手册页说:“如果指定的文件与打字机不对应,则返回x。”
指定的文件将是参数0,所以标准文件,对吗?
什么是打字机?我的键盘?
,你在检查这一行什么?
if (ttyn(0) = 'x')发布于 2014-12-28 17:01:43
那时,打字机(或电传打字机或tty)是通过串口连接到计算机的RS-232终端。/dev中与这些端口对应的设备条目被命名为/dev/tty0、/dev/tty1、/dev/ttya等。这些文件中的每个文件都是一个字符特殊文件,而不是普通文件。
当系统检测到终端时(通常是通过调制解调器打开或连接),init进程在新进程中的文件描述符0、1和2上打开设备,这些文件描述符通过登录进程、用户的shell和从shell分叉的任何进程持续存在。
正如您在问题中所说的,文件描述符0也称为标准输入。
ttyn函数对其参数调用inode函数,该参数返回关于该文件的一些信息,如inode号、权限等。然后,ttyn函数通过/dev读取以"tty"开头的每个文件,以查看哪个文件与ttyn的参数具有相同的inode号。当找到匹配时,它返回文件名的第四个字符,即'0'、'1'、'a'等。如果没有找到匹配,则返回'x'。
在PDP-11上通常有一个控制台和一些8端口的串行接口.所以没有ttyx。你可以在/dev中命名任何你想要的设备。因此很容易避免/dev/ttyx成为一个实际的设备。
像goto这样的命令可以使用ttyn(0) != 'x'来确定用户是否真的在终端上键入命令。
这里是init在V6中使用的默认配置文件/etc/ttys。控制台是tty8。
在V7 Unix中,丁恩的功能被点名 (可以容纳更长的设备名称)取代,而isatty (如果fle是终端设备)返回真。转到命令在V7中不存在。
发布于 2014-12-28 17:10:54
我以前从未见过这个库调用;我已经习惯了更熟悉的ttyname。该网页不提供返回值,但根据文本的内容,它将给出ttynam(3)返回的字符串中的最后一个ttynam(3)值。因此,如果stdin (fd0)连接到“/dev/tty2 2”,则返回值为char 2。在C语言中,您可以使用以下方法进行检查:
if (ttyn(0) == '2') { ... }当然,文件还不清楚。它使用的是糟糕的术语,而不是“打字机”,它应该使用“电传打字”或“终端”,这是公认的术语。请记住,stdin可以与stdout不同;假设您拥有cat </dev/tty1 > /dev/tty2的权限,那么完全有可能运行它。
https://stackoverflow.com/questions/27681693
复制相似问题