Are*_*yan 5 c io terminal input output
我已经阅读了GNU 手册tcsetattr(),它指出该函数具有三个参数:一个文件描述符、一个解释如何处理排队 I/O 的值和一个指向struct termios. 但是,我不明白不同值 ( TCSANOW, TCSADRAIN, TCSAFLUSH, TCSASOFT)之间的区别是什么。
有人可以解释一下吗?
POSIX 规范tcsetattr()说:
如果 optional_actions 是 TCSANOW,则更改应立即发生。
如果 optional_actions 是 TCSADRAIN,则在所有写入 fildes 的输出传输后发生更改。更改影响输出的参数时应使用此功能。
如果 optional_actions 是 TCSAFLUSH,则更改将在写入到 fildes 的所有输出传输后发生,并且在更改之前应丢弃迄今为止接收到但未读取的所有输入。
这些要点是,如果您正在写入串行终端,则可能需要一些时间来刷新写入的数据。不同的值可确保在您需要时发生更改。
TCSASOFT 是针对 BSD 和 Linux 定制的。您可以从您引用的手册页中看到:
TCSANOW — 立即进行更改。
TCSADRAIN — 在等待所有排队的输出写入后进行更改。在更改影响输出的参数时,通常应使用此选项。
TCSAFLUSH — 这类似于 TCSADRAIN,但也会丢弃任何排队的输入。
TCSASOFT — 这是一个标志位,您可以将其添加到上述任何替代方案中。它的意思是禁止改变终端硬件的状态。它是一个 BSD 扩展;它仅在 BSD 系统和 GNU/Hurd 系统上受支持。
使用 TCSASOFT 与在 termios-p 指向的结构体的 c_cflag 成员中设置 CIGNORE 位完全相同。有关 CIGNORE 的说明,请参阅控制模式。
CIGNORE 不是 POSIX 属性。