手册页在这里:http://man.cat-v.org/unix-6th/3/ttyn
这个例子:
if (ttyn(0) = 'x'){
...
}
手册页说“如果指定的文件不对应于一个
打字机。”
指示的文件将是参数 0,所以是标准输入,对吗?
什么是打字机?我的键盘?
你用这条线检查什么?
if (ttyn(0) = 'x')
最佳答案
当时,打字机(或电传打字机或 tty)是通过串行端口连接到计算机的 RS-232 终端。 /dev
中与这些端口对应的设备条目被命名为 /dev/tty0
、 /dev/tty1
、 /dev/ttya
等。这些文件中的每一个都是字符特殊文件,而不是普通文件。
当系统检测到终端时,通常是通过打开或通过调制解调器连接,init
进程在新进程中打开文件描述符 0、1 和 2 上的设备,并且这些文件描述符在登录进程中持续存在,用户的 shell,以及从 shell 派生的任何进程。
正如您在问题中所说,文件描述符 0 也称为标准输入。ttyn
函数在其参数上调用 fstat
,它返回有关文件的一些信息,例如其 inode 编号、权限等。 ttyn
然后读取 /dev
,查看以 "tty"
开头的每个文件,以查看哪个文件具有相同的 inode 编号作为 ttyn
的论点。当找到匹配项时,它返回文件名的第 4 个字符,即 '0'
、 '1'
、 'a'
等。如果没有找到匹配项,则返回 'x'
。
PDP-11 上通常有一个控制台和几个 8 端口串行接口(interface)。所以没有 ttyx
。您可以在 /dev
中为设备命名任何您想要的名称。因此很容易避免 /dev/ttyx
成为实际设备。
像 goto
这样的命令可以使用 ttyn(0) != 'x'
来确定用户是否真的在终端上键入命令。
Here 是 V6 中 /etc/ttys
使用的默认配置文件 init
。控制台是 tty8
。
在 V7 Unix 中, ttyn 的功能被 ttyname 取代,它可以容纳更长的设备名称,而 isatty ,如果文件描述符是终端设备,则返回 true。 V7 中不存在 goto 命令。
关于tty - 函数 ttyn(3) 返回什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27681693/