gpt4 book ai didi

unix - 规范与非规范终端输入

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:16 24 4
gpt4 key购买 nike

我正在为考试而学习,我对Unix中规范输入/输出与非规范输入/输出的工作方式感到困惑(例如,诅咒)我知道有一个缓冲区,对规范输入应用“行规程”这是否意味着对非规范输入绕过缓冲区,或者仅仅意味着不应用行规程对于输入和输出操作,此过程有何不同?
在我使用过的演示规范输入的curses程序中,用户键入的输入在键入了一定数量的字符或经过了一定时间后自动输入这两件事中的任何一件都被认为是“线纪律”还是完全是别的?

最佳答案

对于规范的输入——想想shell;实际上,想想老式的bourneshell吧,因为Bash和它的亲戚有命令行编辑键入一行输入;如果出错,则使用“擦除”字符(默认值通常为Backspace,有时为Delete)擦除前一个字符如果你完全搞砸了,你可以取消整行的杀线字符(不完全标准化,经常是Control-X)在某些系统中,你可以用Control-W得到一个单词erase,所有这些都是规范输入整行将被收集和编辑,直到按行尾字符-返回-为止于是,排队等候的节目就排满了队伍根据未完成的read()系统调用,整行将可供读取(通过对read()的一个或多个调用)。
对于非规范输入-想想vivim或其他-按一个字符,程序就可以立即使用它在你点击返回之前你不会被耽搁系统不编辑这些字符;只要键入这些字符,程序就可以使用它们由程序来适当地解释事情现在,vim做了很多看起来有点像规范输入的事情例如,backspace向后移动,在输入模式下会清除其中的内容但那是因为vim选择让它这样做。
规范输出和非规范输出是一项不那么严肃的工作有一些不同的比特和片段,如是否在线路馈送之前回送回车,是否进行延迟(电子设备不需要;在输出设备可能是110波特电传打字机的日子里很重要)它还可以处理不区分大小写的输出设备——电传打字机小写字母以大写形式输出,大写字母以反斜杠和大写形式输出。
以前,如果您在登录提示中键入所有大写字母,那么登录程序将自动转换为在每个实际大写字母前面都输出反斜杠的模式我怀疑这不再是在电子终端上做的。
TitaniumDecoy在评论中问道:
所以对于非规范输入,输入缓冲区是否完全被忽略另外,直线学科在哪里?
对于非规范输入,仍使用输入缓冲区;如果没有调用read()的程序等待来自终端的输入,则字符保存在输入缓冲区中不会发生的是对输入缓冲区的任何编辑。
行规程类似于输入编辑所做的一组操作因此,行规程的一个方面是擦除字符在规范输入模式下擦除先前的字符如果设置了icase(input case mapping),那么大写字符将映射到小写,除非前面有反斜杠;我相信这是一个行规程,或者是行规程的一个方面。
我忘了提到EOF处理(Control-D)是在规范模式下处理的;它实际上意味着“将累积输入提供给read()”;如果没有累积输入(如果在一行的开头键入Control-D),则read()将返回零字节,然后程序将其解释为EOF当然,之后你可以在键盘上愉快地输入更多的字符,忽略EOF(或以非规范模式运行)的程序将会非常高兴。
当然,在规范模式下,键盘上键入的字符通常会回显到屏幕上;您可以控制该回显是否发生但是,这与规范输入有些相切;即使关闭echo,也会进行常规编辑。
类似地,中断和退出信号是规范模式处理的产物作业控制信号(如control-Z)也会暂停当前进程并返回shell同样,流控制(control-S,control-Q用于停止和启动输出)由规范模式提供。
Rochkind的Advanced Unix Programming, 2nd Edn的第4章介绍了终端I/O,并给出了很多信息,还有更多信息其他的UNIX编程书籍(至少是好的)也将涵盖它。

关于unix - 规范与非规范终端输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37959469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com