IXON 和 IXOFF tty 属性有什么区别?

Igo*_*nko 3 tty pty

具体来说,让我们用伪终端术语来说话。假设我们有文件描述符masterslave一个伪终端对(假设它是一个控制 tty)。禁用IXONon master(或slave,其工作原理相同)意味着当我们这样做时write(master, &control_s_code, 1)read(slave, &byte, 1)将获得此代码。同样的担忧control_q_code。问题是:禁用有IXOFF什么作用?

mos*_*svy 5

IXOFF未在伪 tty 上实现,并且IXOFF在伪 tty 上的设置没有任何影响。

IXOFF应该导致 tty 驱动程序VSTOP在其输入队列已满时向另一端发送一个字符(这应该阻止它发送更多数据),并VSTART在它处理完一个字符并且有更多数据的地方时发送一个字符。

这与 不同IXON,这将导致 tty 驱动程序尊重从另一方发送的VSTART/VSTOP字符,并且在收到VSTOP( ^S) 字符后,停止任何传输,直到收到VSTART( ^Q) 字符为止。

在伪 tty 的情况下,“另一侧”是主 pty,例如。您的终端模拟器;当您按下 时^S,它是,而不是设置会导致从属 tty 停止回显输入的字符并显示写入其中的数据(它将排队直到输出队列已满,当任何到从属 tty 时阻止或返回)。IXONIXOFFwrite(2)EAGAIN

不需要在伪 tty 上实现流控制,因为内核总是知道(通过检查结构字段或类似字段)从属的输入队列是否已填满,并且可以阻止进程写入主 pty。

软件流控制仅在使用没有带外信号(如 RTS/CTS)的真正串行连接时才有用:与任何 Unix、TCP 或其他“管道”抽象不同,线路没有缓冲,并且不会填满和阻塞,直到接收器已经读取了它的所有状态变化。