终端I/O之规范模式】的更多相关文章

规范模式很简单:发一个读请求,输入完一行后,终端驱动程序即刻返回.下列几个条件都会造成读返回: 所要求的字节数已经读到时,读返回.无需读一个完整的行.如果都了部分行,也不会丢失任何信息,下一次读从前一次读的停止处开始. 当读到一个行定界符时,读返回.在规范模式中以下5个字符被解释为"行结束":NL.EOL.EOL2.EOF.设置了ICRNL但未设置IGNCR时的CR字符.在这5个行定界符中,其中只有一个EOF字符在终端驱动程序对其进行处理后即被删除,其他4个字符则作为该行的最后一个字符…
关闭termios结构中c_lflag字段的ICANON标志就使终端处于非规范模式.在非规范模式中,输入数据并不组成行,不处理下列特殊字符:ERASE/KILL/EOF/NL/EOL/EOL2/CR/REPRINT/STATUS/WERASE. 如前所述,规范模式很容易:系统每次返回一行.但在非规范模式下,系统怎样才能知道在什么时候将数据返回给我们呢? 解决方法:当已读了指定量的数据后,或者已经过了给定的时间后,即通知系统返回.这种技术使用了termios结构中c_cc数组的两个变量:MIN和T…
介绍 规范模式是一种特定的软件设计模式,通过使用布尔逻辑 (维基百科)将业务规则链接在一起,可以重新组合业务规则. 在实际中,它主要用于 为实体或其他业务对象定义可重用的过滤器. 例 在本节中,我们将看到需要规格模式.本节是通用的,与ABP的实现无关. 假设您有一种服务方法来计算客户的总数,如下所示: public class CustomerManager { public int GetCustomerCount() { // TODO ... ; } } 您可能希望通过过滤器获得客户数量.…
POSIX.1定义了11个在输入时作特殊处理的字符.实现定义了另外一些特殊字符.表18-6摘要列出了这些特殊字符. 表18-6 终端特殊输入字符 在POSIX.1的11个特殊字符中,可将其中9个更改为几乎任何值.不能更改的两个特殊字符是换行符和回车符(\n和\r),有些实现也不允许更改STOP和START字符.为了进行修改,只要更改termios结构中c_cc数组的相应项.该数组中的元素都用名字作为下标进行引用,每个名字都以字母V开头. POSIX.1允许禁用这些字符.若将c_cc数组中的某项设…
终端I/O有两种不同的工作模式: 规范模式输入处理(Canonical mode input processing).在这种模式中,终端输入以行为单位进行处理.对于每个读要求,终端驱动程序最多返回一行. 非规范模式输入处理(Noncanonical mode input processing).输入字符并不组成行. 如果不作特殊处理,则默认模式是规范模式. V7和较早的BSD风格类的终端驱动程序支持三种终端输入模式:(a)精细加工模式(输入组成行,并对特殊字符进行处理):(b)原始模式(输入不组…
18.1 引言 *终端I/O的用途很广泛,包括用于终端.计算机之间的直接连线.调制解调器以及打印机等等,所以终端I/O系统非常复杂 18.2 综述 *终端I/O有两种不同的工作模式: (1)规范模式输入处理(Canonical mode input processing) (2)非规范模式输入处理(Noncanonical mode input processing) 18.3 特殊输入字符 *CR \r 回车符.不能更改此字符.以规范模式进行输入时识别此字符.当设置了ICANON(规范模式)和…
终端I/O应用很广泛,用于终端.计算机之间的直接连线.调制解调器以及打印机等等.终端I/O有两种不同的工作模式: (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返回一行.(默认模式) (2)非规范模式输入处理:输入字符并不组成行. 终端设备是由一般位于内核的终端驱动程序控制的,每个终端设备有一个输入队列和一个输出队列.如下图: 可以检测和更改的终端设备特性都包含在termios结构中.该结构定义在<termios.h> struct termios{ tc…
6.4.4  使用tcgetattr函数与tcsetattr函数控制终端 为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数.tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数.这两个函数的具体信息如表6.2所示. 表6.2   tcgetattr函数和tcsetattr函数 头文件 <termios.h> <unistd.h> 函数形式 int tcgetattr(int fd, struct t…
我们将会讨论如何更好的控制用户终端:也就说是键盘输入与屏幕输出.除了这些,我们还会了解我们编写的程序如何由用户处读取输入,即使是在输入重定向的情况下,以及确保输出到屏幕的正确位置.这里所提供的一些底层访问也许正是我们所寻找的.我们在这里所涉及的大部分内容也同样可以很好的适用于运行在终端窗口下的程序,例如KDE的Konsole,GNOME的gnome-terminal,或者是标准的X11 xterm. 在这一章,我们将会了解下面一些内容: 终端读取终端驱动器以及通用终端接口termios终端输出与…
终端I/O有两种不同的工作模式: (1)规范模式:输入以行单位进行处理,每个读请求也最多返回一行. (2)非规范模式:输入字符不装配成行. 终端设备是由通常位于内核中的终端驱动程序控制的.每个终端设备都有一个输入队列和一个输出队列. 如果打开了回显,输入队列和输出队列之间有一个隐含的连接 输入队列有一个MAX_INPUT的有限值 还有一个MAX_CANON,限制输入行的最大字节数 输出队列也是有限的,但是当它快要满的时候,内核会让它休眠,直到有可用空间 终端行规程(terminal line d…