我从这个页面的例子中读到了有关ptys的内容:pdip.html。我有两个问题:
发布于 2014-12-05 09:16:35
您提到的文章非常优秀,而且很难改进,但它相当技术性。我会尝试给出一个较少技术性的解释(请原谅我,Unix古鲁!)
管道只是一个单向数据通道:只能在一端写入,在另一端读取。对于双向进程间通信,您总是需要两个管道。管道是很好的移动钻头,但没有更多。
pty (伪终端)可以在两端读写,但它不仅仅是一个双向的数据通道。要理解这一点,看一看真正的终端是有用的:一端有一个读取击键和将字符发送到电传打字机或屏幕的过程。在另一端,有一个真正的人类在敲击键盘,盯着上面提到的屏幕。只有一端有文件描述符,另一端只是连接器和电缆。
从历史上看,终端已经开发了许多可由运行在其上的程序控制的属性(如“回波模式”或“规范模式”,参见termios (3)),终端还可以让用户(通过上述连接器和电缆)发送可用于“作业控制”的信号,例如,键入CTRL将前台作业置于后台。
pty就像一个真正的终端,其中两端都是文件描述符:
ECHO属性时)。它还可以(在大多数现代单元上)控制以从站作为其控制终端的会话),例如通过发送CTRL+Z。要理解控制终端是什么,再一次考虑真正的用户登录到真实终端的场景是非常有用的。用户可以启动“会话”,即进程的集合,其中一些在前台作业中,另一些在后台。
为了防止混乱,控制终端(即与其相关联的内核结构)跟踪哪些进程处于前台或后台作业中,哪些进程允许读取和写入。每当进程尝试一些非法的东西(比如从控制终端读取的后台进程),操作就会失败(使用EIO),然后整个作业由内核停止(使用信号SIGTTIN)。
这表明,就像实际的终端一样,只有pty的从端才能成为控制终端,而这一概念只适用于支持作业控制的Unix系统(现在的任何Unix系统)。
https://stackoverflow.com/questions/26659595
复制相似问题