是否可以验证程序是否已调用
cfmakeraw()
将其控制终端设置为原始模式?
我最初认为可以通过使用stty -a -F /dev/pts/N
并检查raw
输出中是否存在来验证终端是否在原始模式下运行。
然而,raw
无非是组合设置(man stty
):
raw same as -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost -isig -iuclc -ixany -imaxbel -xcase min 1 time 0
并且它没有说明“输入是否可以逐个字符地使用”(见下文)。
特别是,规范模式(与原始模式对应)根据 ( ) 设置man termios
:
c_lflag 中 ICANON canon 标志的设置确定终端是在规范模式(ICANON 设置)还是非规范模式(ICANON 未设置)下运行。默认情况下,设置 ICANON。
但man stty
定义icanon
如下:
[-]icanon
enable special characters: erase, kill, werase, rprnt
如何查看输入是逐字符可用(原始模式)还是逐行可用(规范模式)?
man termios
:
Raw mode
cfmakeraw() sets the terminal to something like the "raw" mode of the old Version 7 terminal driver: input is available character by character, echoing is disabled, and all special processing of terminal input and output characters is disabled. The terminal at‐
tributes are set as follows:
termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
| INLCR | IGNCR | ICRNL | IXON);
termios_p->c_oflag &= ~OPOST;
termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
termios_p->c_cflag &= ~(CSIZE | PARENB);
termios_p->c_cflag |= CS8;