当进程写入伪终端从属时,为什么它没有读取它写入的内容?

当进程写入伪终端从属时,为什么它没有读取它写入的内容?

这是我的 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写入(非常简单):

  • 如果某个进程将某些数据写入从设备,则将该数据作为结果提供给主设备上的下一个读取操作。
  • 如果某个进程将某些数据写入主设备,则将该数据作为结果提供给从设备上的下一个读取操作。

这是不是写入以将写入从设备的数据返回到从设备上的读取操作,因此不会发生这种情况。

相关内容