当前位置:嗨网首页>书籍在线阅读

15-总结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

62.11 总结

在早期的UNIX系统上,终端是通过串行线连接到计算机上的真正的硬件设备。早期的终端并没有得到标准化,这意味着对于不同的硬件厂商,对终端进行编程时的转义序列是不同的。在现代工作站上,这样的终端已经被运行着X Window系统的位图监视器所取代了。但是,当处理虚拟设备比如虚拟控制台和终端模拟器(使用了伪终端),以及通过串行线连接的真实设备时,仍然需要能够对终端进行编程。

有关终端的设置(除了终端窗口大小外)都维护在termios结构体中,它包含了4个位掩码字段用来控制有关终端的各种设置,以及一个定义了各种特殊字符的数组,这些特殊字符由终端驱动程序负责解释。函数tcgetattr()和tcsetattr()允许程序获取并修改终端的设置。

当执行输入时,终端驱动程序可以操作于两种不同的模式下。在规范模式下,输入会装配成行(由其中一种行终止符结束),且打开了行编辑功能。与之相反,非规范模式下允许应用程序一次只读取一个输入字符,而不需要等到用户输入一个行终止符。非规范模式下禁止了行编辑功能。非规范模式下的读操作什么时候完成,是由 termios 结构体中的MIN和TIME字段来控制的,它们决定了最少被读取的字符数以及施加于读操作上的超时时间。我们对非规范模式下的读操作的4种不同情况作了描述。

历史上第7版UNIX以及BSD终端驱动程序提供了3种输入模式——加工模式、cbreak模式和原始模式——它们对终端的输入和输出处理提供了不同程度的支持。cbreak和原始模式可以通过修改termios结构体中的各个字段来模拟。

还有一系列函数可以执行各种其他的终端操作。这些函数包括修改终端线速以及执行行控制操作(生成一个BREAK状态,暂停进程直到输出已经完成传递,刷新终端的输入和输出队列,暂停或恢复终端和计算机之间的双向数据传输)。其他的函数允许我们检查给定的文件描述符是否指向一个中断,并获取该终端的名称。系统调用 ioctl()可用来获取并修改由内核记录的终端窗口大小,并执行一系列其他的与终端相关的操作。

更多信息

[Stevens, 1992]中也对面向终端的编程做了描述,并对串口编程做了更加细致的讲解。网络上还有一些讨论面向终端编程的优秀资源。比如在LDP站点(http://www.tldp.org)上的Serial HOWTO以及Text-terminal HOWTO,作者都是David S. Lawyer。另一个有用的资源是Michael R. Sweet 所著的《POSIX 操作系统下的串口编程指南》(“Serial Programming Guide for POSIX Operation Systems”),可以在http://www.easysw.com/~mike/serial/上找到在线资源。