Unix /dev/tty有什么特别之处?
Unix /dev/tty有什么特别之处?,unix,Unix,ls-la/dev/tty显示输出: crw-rw-rw- 1 root tty 5, 0 Dec 14 22:21 /dev/tty c开头是什么意思?当我执行类似于pwd>/dev/tty的操作时,它会打印到标准输出。文件/dev/tty包含什么?c表示它是一个字符特殊文件。c表示它是一个字符设备。tty是一个特殊文件,表示当前进程的“控制终端” 字符设备 Unix支持“设备文件”,它们根本不是真正的文件,而是指向硬件设备的类似文件的访问点。 “字符”设备是一个逐字节连接的设备(与缓冲IO
ls-la/dev/tty
显示输出:
crw-rw-rw- 1 root tty 5, 0 Dec 14 22:21 /dev/tty
c开头是什么意思?当我执行类似于
pwd>/dev/tty
的操作时,它会打印到标准输出。文件/dev/tty包含什么?c表示它是一个字符特殊文件。c表示它是一个字符设备。tty是一个特殊文件,表示当前进程的“控制终端”
字符设备
Unix支持“设备文件”,它们根本不是真正的文件,而是指向硬件设备的类似文件的访问点。
“字符”设备是一个逐字节连接的设备(与缓冲IO相反)
TTY
/dev/tty是一个特殊文件,表示当前进程的终端。因此,当您echo 1>/dev/tty
时,您的消息('1')将出现在屏幕上。同样,当您cat/dev/tty
时,后续输入会重复(直到您按下Ctrl-C)
/dev/tty
本身并不“包含”任何内容,但您可以从中读取和写入(无论它值多少钱)。我想不出它有什么好的用途,但是有一些类似的文件对于简单的IO操作非常有用(例如,/dev/ttyS0
通常是您的串行端口)
此报价来自:
/dev/tty代表电流的控制终端(如果有)
过程找出哪些tty附加到哪些进程使用
shell提示符下的“ps-a”命令(命令行)。看这张照片
“tty”列。对于您所在的shell进程,/dev/tty是
您现在使用的终端。在shell提示符处键入“tty”以查看
它是(参见手册第tty(1)页)/dev/tty类似于指向
实际的终端设备名称,具有以下功能:
C程序员:参见手册第tty(4)页
这是手册页:
/dev/tty
是当前进程的控制终端(如果有)的同义词。正如jtl999所说,这是一个字符特殊文件;这就是ls-l
输出中的c
的意思
man 4tty
或man-s 4tty
应提供更多信息,或者您可以在线阅读手册页
顺便说一句,pwd>/dev/tty
不一定打印到shell的stdout(尽管它是pwd
命令的标准输出)。如果shell的标准输出已重定向到终端以外的其他对象,/dev/tty
仍指终端
您也可以从
/dev/tty
中读取,通常从键盘读取。我不理解您的pwd>/dev/tty不一定打印到标准输出。如果标准输出已重定向到终端以外的其他位置
。在我看来,它总是将进程的文件描述符1设置为/dev/tty。你能解释一下吗?@大港:你的观点是错误的。如果标准输出被重定向到文件,则文件描述符1将引用该文件,而不是终端。这就是重定向的含义。是的,fd 1可以引用任何文件,但是无论fd 1引用到哪里,都意味着让fd 1引用终端。你能提供一个例子来支持你的论点吗?一个例子来说明它是如何起作用的:(echo to stdout;echo to tty>/dev/tty)>一个_文件
你会发现“to stdout”被重定向到一个_文件,但“to tty”仍然会出现在shell运行的终端上,而不会被重定向到_文件。运行(…)
内部部件的子shell已将stdout重定向到文件,但控制终端仍然是父shell运行的任何终端,例如,您的xterm或ssh或串行控制台等。我发现这样做非常有用查找-类型d-name dummy | tee/dev/tty | xargs rm
如果您试图调用管道中的编辑器(例如,使用xargs
),则/dev/tty
有一个很好的用途。由于xargs
的标准输入是一些文件列表,而不是您的终端,因此只需执行|xargs emacs
等操作就会使您的终端出错。相反,您可以使用|xargs sh-c'emacs“$@”