函数ttyn(3)返回什么?

时间:2014-12-28 15:08:33

标签: tty c

手册页位于:http://man.cat-v.org/unix-6th/3/ttyn

这个例子:

if (ttyn(0) = 'x'){
...
}

手册页说“如果指示的文件与a不对应,则返回 x      打字机。

指示的文件是参数0,所以标准输入,对吗?

什么是打字机?我的键盘?

你在用这条线检查什么?

if (ttyn(0) = 'x')

2 个答案:

答案 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