08-规范模式
62.6.1 规范模式
我们可通过设定 ICANON 标志来打开规范模式输入。可通过如下几点来区分是否为规范模式下的输入。
- 输入被装配成行,通过如下几种行结束符来终结:NL、EOL、EOL2(如果设定了IEXTEN标志)、EOF(除了一行中的初始位置)或者CR(如果打开了ICRNL标志)。除了EOF之外,其他的行结束符都会传递给读取的进程(作为一行中的最后一个字符)。
- 打开了行编辑功能,这样可以修改当前行中的输入。因此,下列字符是可用的:ERASE、KILL。如果设定了IEXTEN标志的话,WERASE也是可用的。
- 如果设定了IEXTEN标志,则REPRINT和LNEXT字符也都是可用的。
在规范模式下,当存在有一行完整的输入时,终端上的read()调用才会返回。(如果请求的字节数比一行中所包含的字节小,那么read()只会获取到该行的一部分。剩余的字节只有在后序的read()调用中取得。)如果read()调用被信号处理例程中断,且该信号没有系统调用重启,此时read()也会终止执行(见21.5节)。
在62.5节中我们描述了NOFLSH标志,我们注意到产生信号的字符同样会导致终端驱动程序刷新终端的输入队列。无不管信号是否被捕获或者是被应用程序忽略,刷新都会发生。我们可以通过打开NOFLSH标志来防止出现这种刷新的行为。