- Linux程序设计(第4版)
- (英)Neil Matthew Richard Stones
- 903字
- 2021-04-09 20:04:51
5.3 终端驱动程序和通用终端接口
有时,程序需要更精细的终端控制能力,而不是仅通过简单的文件操作来完成对终端的一些控制。Linux提供了一组编程接口用来控制终端驱动程序的行为,从而使得更好地控制终端的输入和输出。
5.3.1 概述
如图5-1所示,你可以通过一组函数调用(通用终端接口,简称GTI)来控制终端,这组函数调用与用于读写数据的函数是分离的,这就使得读写数据的接口非常简洁,同时又允许用户可以对终端的行为进行更精细的控制。但这并不意味着终端I/O接口也非常简洁,相反,它需要支持大量不同类型的硬件。
图5-1
用UNIX的术语来说,控制接口定义了一个“线路规程”,它使程序在指定终端驱动程序的行为时拥有极大的灵活性。
下面是你能够控制的主要功能。
❑ 行编辑:是否允许用退格键进行编辑。
❑ 缓存:是立即读取字符,还是等待一段可配置的延迟之后再读取它们。
❑ 回显:允许控制字符的回显,例如读取密码时。
❑ 回车/换行(CR/LF):定义如何在输入/输出时映射回车/换行符,比如打印\n字符时应该如何处理。
❑ 线速:这一功能很少用于PC控制台,但对调制解调器或通过串行线连接的终端就很重要。
5.3.2 硬件模型
在学习通用终端接口之前,你十分有必要先理解它所要驱动的硬件模型。
图5-2所示的概念布局图(某些早期UNIX站点的实际情况就是这样)是让一台UNIX机器通过串行口连接一台调制解调器,再通过电话线连接到用户端的调制解调器,该调制解调器最终连接到用户的终端。事实上,这正是某些小型ISP(因特网服务提供商)在因特网早期使用的一种配置情况。这种连接方式可以看作是客户/服务器模型的一个“远亲”,它用于程序运行在大型主机上,而用户工作在哑终端的情况。
图5-2
如果你工作在一台运行着Linux系统的PC上,可能会认为这个模型过于复杂。但因为本书的两位作者都有调制解调器,所以如果愿意的话,就可以按照图中的方式用一对调制解调器和电话线将两人的电脑连接起来,并通过终端仿真程序(如minicom)远程登录到对方的机器上。当然,如今的快速宽带接入已让这种类型的连接方式过时,但这个硬件模型仍有其用处。
使用这样一个硬件模型的好处是,绝大多数现实世界中的情况都只是这一最复杂情况的子集。如果这个模型忽略了一些功能,那么它就不能很好的支持各种现实情况。