这是我的 bash 会话:
lrwx------ 1 stas stas 64 Mar 5 18:18 0 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar 5 18:18 1 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar 5 18:18 2 -> /dev/pts/0
我们看到 bash 既读取又写入/dev/pts/0
。我的问题是:为什么进程不读取它刚刚写入的内容?是什么让它只master pty
接收数据?
答案1
/dev/pts/0
不是一个常规文件而是一个字符设备节点,从ls -l
输出的第一列可以看出:
v
crw--w---- 1 tilman tty 136, 0 Mär 6 20:25 /dev/pts/0
因此,读写操作不是访问磁盘上的某个文件,而是由一个称为设备驱动程序的软件处理,该软件几乎可以完成其作者希望它做的任何事情,从什么都不做(如背后的驱动程序的情况/dev/null
)到对计算机中某些硬件执行复杂的操作(如实际硬件驱动程序的情况)。
在该驱动程序的特定情况下/dev/pts/0
写入(非常简单):
- 如果某个进程将某些数据写入从设备,则将该数据作为结果提供给主设备上的下一个读取操作。
- 如果某个进程将某些数据写入主设备,则将该数据作为结果提供给从设备上的下一个读取操作。
这是不是写入以将写入从设备的数据返回到从设备上的读取操作,因此不会发生这种情况。