我一直在从本页的示例中阅读有关 ptys 的内容:http://www.roucha.fr/tech_corner/pty_pdip.html http://www.rkoucha.fr/tech_corner/pty_pdip.html。我有两个问题:
The article http://www.rkoucha.fr/tech_corner/pty_pdip.html你提到的非常好,很难改进,但它是相当技术性的。我将尝试给出一个不太技术性的解释(请耐心等待,Unix 大师!)
A pipe只是一个单向数据通道:只能在一端写入,在另一端读取。对于双向进程间通信,您始终需要two管道。管道非常适合移动钻头,但不能用于更多用途。
A pty(伪终端)可以在两端读写,但它不仅仅是一个双向数据通道。为了理解这一点,看一下真实的终端是很有用的:在一端有一个进程读取击键并将字符发送到电传打字机或屏幕。另一端有一个真人敲击键盘并盯着上述屏幕。只有一端有文件描述符,另一端只是连接器和电缆。
从历史上看,终端已经开发了许多可以由其上运行的程序控制的属性(例如“回显模式”或“规范模式”,请参阅termios (3)
)此外,终端还可以让用户(通过上述连接器和电缆)发送可用于“作业控制”的信号,例如通过键入 CTRL-Z 将前台作业置于后台。
A pty
就像一个真正的终端两端是文件描述符:
-
the 从端行为与真实终端完全相同:具有从端描述符的进程(“下级进程”)可以读取和写入它,但也可以设置终端属性,如回显模式或中断字符(例如 CTRL+C) 。它通常甚至不会意识到它没有连接到真实的屏幕和键盘。
-
the 主端看起来更像是键盘和电传打字机,不是由人类使用,而是由其他进程使用:任何打开主端的进程都可以对其进行写入,并且会收到回显(但前提是下级进程设置了ECHO
从属设备上的属性)。它还可以(在大多数现代 unice 上)控制以从属设备作为其会话的会话控制终端),例如通过发送 CTRL+Z。
要了解什么是控制终端也就是说,考虑真实用户在真实终端登录的场景再次很有用。用户可以启动一个“会话”,即进程的集合,其中一些在前台作业,其他在后台。
为了防止混乱,控制终端(即与其关联的内核结构)会跟踪哪些进程处于前台或后台作业,以及允许哪些进程对其进行读取和写入。每当进程尝试非法操作(例如从控制终端读取的后台进程)时,操作就会失败(EIO
)然后整个作业被内核停止(使用信号SIGTTIN
)
这表明,就像真正的终端一样,只有 pty 的从属端才能成为控制终端,并且这个概念仅在支持作业控制的 Unix 系统上才有意义(现在是任何 Unix 系统)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)