《UNIX环境高级编程》笔记--终端IO

终端IO有两种不同的工作模式:

1.规范模式输入处理。在这种模式中,终端输入以行为单位进行处理。对于每个读要求,终端驱动程序最多返回一行。

例如,若shell把标准输入重定向到终端,

2.非规范模式输入处理。输入字符并不组成行。

终端设备是由一般位于内核中的终端驱动程序控制的。每个终端设备有一个输入队列和一个输出队列。

大多数UNIX系统在一个称为终端行规程(terminal line discipline)的模块中进行规范处理。它位于内核通用读、写函数

和实际设备驱动程序之间的模块。

《UNIX环境高级编程》笔记--终端IO_第1张图片

所有我们可以检测和更改的终端设备特性都包含在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的值如下:

《UNIX环境高级编程》笔记--终端IO_第2张图片

c_iflag的值如下:

《UNIX环境高级编程》笔记--终端IO_第3张图片

《UNIX环境高级编程》笔记--终端IO_第4张图片

c_lflag的值如下:

《UNIX环境高级编程》笔记--终端IO_第5张图片

c_oflag的值如下:

《UNIX环境高级编程》笔记--终端IO_第6张图片

《UNIX环境高级编程》笔记--终端IO_第7张图片


如何才能检测和更改终端设备的这些特性呢。下表列出了SUS所定义的对终端设备进行操作的各个函数。

《UNIX环境高级编程》笔记--终端IO_第8张图片

这几个函数之间的关系如下:

《UNIX环境高级编程》笔记--终端IO_第9张图片


上文来自:http://blog.csdn.net/TODD911/article/details/20481837

你可能感兴趣的:(C++,unix,终端,C++11)