终端I/O之综述


终端I/O有两种不同的工作模式:

如果不作特殊处理,则默认模式是规范模式。

终端设备是由一般位于内核中的终端驱动程序控制的。每个终端设备有一个输入队列和一个输出队列,如图18-1所示。

图18-1 终端设备的输入、输出队列逻辑结构

大多数UNIX系统在一个称为终端行规程(terminal line discipline)的模块中进行规范处理。它是位于内核通用读、写函数和实际设备驱动程序之间的模块(见图18-2)。

图18-2 终端行规程

};

粗略而言,输入标志由终端设备驱动程序用来控制字符的输入(剥除输入字节的第8位,允许输入奇偶校验等等),输出标志则控制驱动程序输出(执行输出处理、将换行符映射为CR/LF等),控制标志影响到RS-32串行线(忽略调制解调器的状态线、每个字符的一个或两个停止位等等),本地标志影响驱动程序和用户之间的接口(回送的开或关、可视的擦除字符、终端产生的信号启用以及对后台输出的作业控制停止信号等)。

    类型tcflag_t的长度足以保存每个标志值。它经常被定义为unsigned int或者unsigned long。c_cc数组包含了所有可以更改的特殊字符。NCCS是该数组的长度,一般介于15-20之间(大多数UNIX系统定义的特殊字符较POSIX所定义的11个要多)。cc_t类型的长度足以保存每个特殊字符,而且它往往是unsigned char型的。

    表18-1至表18-4列出了所有可以进行更改以影响终端设备特性的终端标志。注意,虽然Single UNIX Specification定义了所有平台都支持的公共子集,但是各平台还有自己的扩充部分。

表18-1 c_cflag终端标志

表18-2 c_iflag终端标志

表18-3 c_lflag终端标志

表18-4 c_oflag终端标志

表18-5 终端I/O函数总览

图18-3 与终端有关的函数之间的关系

相关内容