终端IO有两种不同的工作模式:
1.规范模式输入处理。在这种模式中,终端输入以行为单位进行处理。对于每个读要求,终端驱动程序最多返回一行。
例如,若shell把标准输入重定向到终端,
2.非规范模式输入处理。输入字符并不组成行。
终端设备是由一般位于内核中的终端驱动程序控制的。每个终端设备有一个输入队列和一个输出队列。
大多数UNIX系统在一个称为终端行规程(terminal line discipline)的模块中进行规范处理。它位于内核通用读、写函数
和实际设备驱动程序之间的模块。
所有我们可以检测和更改的终端设备特性都包含在termios结构中,该结构定义在头文件<termios>h>中。
struct termios{
tcflag_t c_iflag; //input flags
tcflag_t c_oflags; //output flags
tcflag_t c_cflags; //control flags
tcflag_t c_lflags; //local flags
cc_t c_cc[NCCS]; //control characters
};
输入标志由终端设备驱动程序用来控制字符的输入。
输出标志则控制驱动程序的输出。
控制标志影响到RS-232串行线。
本地标志影响驱动程序和用户之间的接口。
c_cc数组包含了所有可以更改的特殊字符。会在以后的特殊输入字符章节进行说明。
c_cflag的值如下:
c_iflag的值如下:
c_lflag的值如下:
c_oflag的值如下:
如何才能检测和更改终端设备的这些特性呢。下表列出了SUS所定义的对终端设备进行操作的各个函数。
这几个函数之间的关系如下:
上文来自:http://blog.csdn.net/TODD911/article/details/20481837