《unix环境高级编程》通读学习笔记(三)(第11章)
上一篇 / 下一篇 2007-07-28 17:12:59 / 个人分类:unix环境高级编程的学习记录
n*mzf(d$j.I5Y0第11章 终端I/O51Testing软件测试网Z^F A]Q c
11.1 引言
{/H+R9x8SK v2~0终端I/O的用途很广泛,包括:终端、计算机之间的直接连接、调制解调器、打印机等等,所以它就变得非常复杂。
11.2 综述51Testing软件测试网;xh
z*hk_;|
终端I/O有两种不同的工作方式:
~+`f-wm'?5M0(1) 规范方式输入处理。在这种方式中,终端输入以行为单位进行处理。对于每个读要求,终端驱动程序最多返回一行。
bbuqzS
m0(2) 非规范方式输入处理。输入字符不以行为单位进行装配。51Testing软件测试网#uL-P4H4a/JrW4V
如果不作特殊处理,则默认方式是规范方式。
MD`TVevy:}l:t
Z
\0终端设备是由一般位于内核中的终端驱动程序所控制的。每个终端设备有一个输入队列,一个输出队列。
Xn^lg&Y gc0`n0图11-1 终端设备的输入、输出队列的逻辑结构
+_3~V
o/Q0p8_6E;D0大多数UNIX系统在一个称为终端行规程(terminal lined iscipline)的模块中进行规范处理。它是位于内核类属读、写函数和实际设备驱动程序之间的模块。51Testing软件测试网BZ5N3aOv8Q
图11-2 终端行规程
po
[ ?4lWro&g0我们可以检测和更改的终端设备特性都包含在termios结构中。该结构在头文件<termios.h>中定义。51Testing软件测试网
bzE8oX!Y#u8j7d7m
表11 - 1列出了所有可以更改以影响终端设备特性的终端标志。
8C$|e:v?.yH hf
F0表11 - 2列出了POSIX.1所定义的对终端设备进行操作的各个函数。
11.3 特殊输入字符51Testing软件测试网$Sv[\d L0L d4F
表11-3 终端在输入时作特殊处理的字符。
Q0o;Ns4W0在POSIX.1的11个特殊字符中,可将其中9个更改为几乎任何值。可选地允许禁止使用这些字符。
11.4 获得和设置终端属性
4@hb&F&B#[0使用函数tcgetattr和tcsetattr可以获得或设置termios。这样也就可以检测和修改各种终端选择标志和特殊字符,以使终端按我们所希望的方式进行操作。51Testing软件测试网FoD;hP[
——————————————————————————————————————————————
MYQSY_5U8x*z-e;y0#include <termios.h>51Testing软件测试网kf8[:f~G;_q
int tcgetattr(int filedes, struct termios *termptr);51Testing软件测试网P(vNd,Zy9ko0H:]
int tcsetattr(int filedes, int opt, const struct termios *termptr);
r`/z'j6f
eO
}0两个函数返回:若成功则为0,若出错则为-151Testing软件测试网j k^&S;G5G;fk
——————————————————————————————————————————————51Testing软件测试网z*XOh]
\*`4ld!d
SbgR*g fe1L7a011.5 终端选择标志
-re
M:Tv LW~O_011.6 stty命令
Oz;TM(B(v"n4@0上节说明的所有选择项,在程序中都可用tcgetattr和tcsetattr函数(见11.4节)进行检查和更改。在命令行中则用stty(1)命令进行检查和更改。stty(1)命令是表11-2中所列的头6个函数的界面。如果以-a选择项执行此命令,则显示终端的所有选择项