手册页位于:http://man.cat-v.org/unix-6th/3/ttyn
这个例子:
if (ttyn(0) = 'x'){
...
}
手册页说“如果指示的文件与a不对应,则返回 x 打字机。“
指示的文件是参数0,所以标准输入,对吗?
什么是打字机?我的键盘?
你在用这条线检查什么?
if (ttyn(0) = 'x')
答案 0 :(得分:7)
此时,打字机(或电传打字机或tty)是通过串口连接到计算机的RS-232终端。与这些端口对应的/dev
中的设备条目名为/dev/tty0
,/dev/tty1
,/dev/ttya
等。其中每个文件都是字符特殊文件,而不是普通文件。
当系统检测到终端时,通常是通过调制解调器打开或连接,init
进程在新进程中打开文件描述符0,1和2上的设备,并且这些文件描述符通过登录过程,用户的shell以及从shell派生的任何进程持久化。
正如您在问题中所说,文件描述符0也称为标准输入。
ttyn
函数在其参数上调用fstat
,该参数返回有关文件的一些信息,例如其inode编号,权限等。ttyn
然后读取/dev
,查看以"tty"
开头的每个文件,查看哪个文件的节点号与ttyn
的参数相同。当找到匹配项时,它会返回文件名的第4个字符,即'0'
,'1'
,'a'
等。如果未找到匹配项,则返回{{1} }。
PDP-11上通常有一个控制台和一些8端口串行接口。所以没有'x'
。您可以在ttyx
中为任何您想要的设备命名。因此,很容易避免/dev
成为实际的设备。
/dev/ttyx
之类的命令可以使用goto
来确定用户是否实际在终端上键入命令。
Here是默认配置文件ttyn(0) != 'x'
,由/etc/ttys
在V6中使用。控制台是init
。
在V7 Unix中,ttyn的功能被ttyname取代,isatty可以容纳更长的设备名称,goto如果fle描述符是终端设备则返回true。 V7中没有{{3}}命令。
答案 1 :(得分:0)
我以前从未见过这个图书馆电话;我已经习惯了更为熟悉的ttyname
。网页没有给出返回值,但根据文本说明的内容,它会给出char
返回的字符串中的最后ttynam(3)
值。因此,如果stdin(fd0)连接到" / dev / tty2",那么返回值将是char 2
。在C中,您可以通过以下方式进行检查:
if (ttyn(0) == '2') { ... }
当然,文件不清楚。它使用了不好的术语;而不是&#34;打字机&#34;,它应该使用&#34;电传打字机&#34;或者&#34; terminal&#34;,这是可接受的术语。请记住,stdin可能与stdout不同;假设您拥有该权限,则完全可以运行cat </dev/tty1 > /dev/tty2
。