是否可以验证程序是否调用了“cfmakeraw()”将其控制终端设置为原始模式?

是否可以验证程序是否调用了“cfmakeraw()”将其控制终端设置为原始模式?

是否可以验证程序是否已调用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;

相关内容