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

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

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

答案1

IXOFF没有在伪 tty 上实现,并且IXOFF在伪 tty 上设置没有任何效果。

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

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

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

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

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

相关内容