在我使用的curses程序中,我演示了规范的输入,用户输入的输入在一定数量的字符输入或一定时间过去后自动输入。这些东西是否被认为是“线路学科”,还是完全是这些东西?
对于非规范输入 – 认为vi或vim或任何 – 你按一个字符,它立即可用于程序。你不会被阻止,直到你回到。系统不对字符进行编辑;它们在输入后立即提供给程序。这是由程序来适当地解释事情。现在,vim做了一些看起来有点像规范输入的东西。例如,backspace向后移动,在输入模式下擦除那里的内容。但是这是因为vim选择使它的行为像这样。
规范和非规范的产出是一个不太严重的业务。有几个位和片段的差异,与是否在回线之前回波回车,和是否做延迟(没有必要与电子;重要的是在输出设备可能是一个110-波特电传)。它也可以做事情,如处理不区分大小写的输出设备 – 电传。小写字母输出为大写,大写字母输出为反斜线和大写。
过去,如果您在登录提示符下键入所有大写字母,那么登录程序将自动转换为在每个实际资本前面输入所有上限的模式,并使用反斜杠。我怀疑这不再在电子终端上做。
在一个评论,TitaniumDecoy问:
So with non-canonical input,is the input buffer bypassed completely? Also,where do line disciplines come in?
使用非规范输入,输入缓冲区仍在使用;如果没有具有等待从终端输入的read()调用的程序,则字符保持在输入缓冲器中。不会发生的任何编辑输入缓冲区。
线规则是输入编辑所做的一组操作。因此,线规程的一个方面是擦除字符在规范输入模式下擦除先前字符。如果您设置了icase(输入大小写映射),则大写字符映射到小写字符,除非前面加上反斜杠;这是一条线路学科,我相信,或线路学科的一个方面。
我忘了提到EOF处理(Control-D)是在规范模式下处理;它实际上意味着“使累积输入可用于read()”;如果没有累积的输入(如果在行的开头输入Control-D),则read()将返回零字节,然后由程序解释为EOF。当然,之后可以在键盘上快速键入更多字符,忽略EOF(或以非规范模式运行)的程序将会很高兴。
当然,在规范模式中,在键盘上键入的字符通常被回显到屏幕;您可以控制是否发生回波。然而,这与规范输入有些相切;即使回波关闭,也会发生正常编辑。
类似地,中断和退出信号是规范模式处理的假象。作业控制信号(如Control-Z)也暂停当前进程并返回shell。同样,流量控制(Control-S,Control-Q到停止和启动输出)由规范模式提供。
Rochkind的Advanced Unix Programming,2nd Edn第4章涵盖终端I / O,并提供了大量的信息 – 还有更多。其他UNIX编程书(至少,好的)也将覆盖它。