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“$@”