具体来说,我们用伪终端术语来说。假设我们有文件描述符master
和slave
伪终端对(假设它是一个控制终端)。禁用IXON
on 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
/字符,并且在接收到( ) 字符时停止任何传输,直到接收到( ) 字符。VSTOP
VSTOP
^S
VSTART
^Q
在伪 tty 的情况下,“另一端”是主 pty,例如。您的终端模拟器;当您按 时^S
,是,而不是设置将导致从属 tty 停止回显输入的字符并显示写入其中的数据(它将排队直到输出队列已满,当任何从属 tty 都将阻止或返回)。IXON
IXOFF
write(2)
EAGAIN
不需要在伪 tty 上实现流量控制,因为内核总是知道(通过检查结构字段或类似字段)从属设备的输入队列是否已填满,并且可以阻止向主设备 pty 写入的进程。
软件流量控制仅在使用真正的串行连接时才有用没有带外信号,如 RTS/CTS:与任何 Unix、TCP 或其他“管道”抽象不同,线路不会缓冲,并且不会填满并阻塞,直到接收器读取其上的所有状态更改。