【发布时间】:2016-07-14 15:08:25
【问题描述】:
假设我在 konsole 中打开了两个选项卡(Tab1 和 Tab2)。
当我在他们两个中运行 tty 时,我有:
Tab1:
~$ tty
/dev/pts/23
Tab2:
~$ tty
/dev/pts/24
如果我在 Tab1 中运行带有 printf("Hello") 的简单程序 hello.c,系统如何从写入 stdout(文件 id 1)到写入 /dev/pts/23,被读取konsole 然后出现在 Tab1 中?
系统如何知道它必须将“Hello”字符串提供给 /dev/pts/23 而不是 /dev/pts/24?它是如何做到的?
bash 是否给程序提供了一个参数,以便它知道哪个伪终端发送“Hello”?或者程序将字符串发送回 bash(如何?)谁知道将数据发送到哪个伪终端?
感谢您的帮助
【问题讨论】:
-
打开的文件集对于每个进程都是本地的。 shell 在 stdin/out/err 插槽中打开了一个特定的伪终端设备,该设备在生成时由子进程继承。伪终端本身本质上是一个由系统调用分配的命名管道,x 终端或您正在使用的任何终端正在从另一端读取文本并打印到屏幕上。 This is a good read 顺便说一句。
标签: stdout pty terminal-emulator