下载
第1 8 章 调制解调器拨号器
18.1 引言
与调制解调器相关的程序要处理如此种类繁多的调制解调器很困难。在大多数 U N I X 系统
中总有两个程序来处理调制解调器。第一个是远程登录程序,它允许我们拨通另外的计算机、
登录和使用远程系统。在系统V中这个程序叫做c u,而B S D则称它为t i p。它们完成类似的工作,
而且都可以处理很多不同类型的调制解调器。另一个使用调制解调器的程序是 u u c i c o ,它是
U U C P 包的一部分。问题是不同种类调制解调器的具体特性一般都包含在这些程序的内部,所
以,如果想写其他使用调制解调器的程序,就不得不做与这些程序类似的工作。同样,如果想
要改变这些程序,使其不通过调制解调器,而利用其他介质通信(例如网络连接),那么也要
做很大的改动。
本章开发了一个程序来处理调制解调器所有需要处理的细节。我们把所有这些的细节都集
中到这个程序中,而不是分散在多个程序里(这个程序的构思来自于 Presotto 和Ritchie [1990]
所描述的连接服务器)。为了使用这个程序,必须能如 1 5 . 3节所说明的那样调用它,并使它传
回文件描述符。然后,用这个程序来开发远程登录程序(类似 c u和tip )。
18.2 历史
cu(1) 命令(意思是call UNIX)是在V 7中出现的。但它只能处理一种特殊的自动拨号单元
(A C U)。伯克利的Bill Shannon修改了c u,并把它实现在4 . 2 B S D的t i p ( 1 )中。这之间的最大改变
是使用了一个文本文件/ e t c / r e m o t e来存放所有的系统信息(电话号码、优先的拨号器、波特率、
奇偶校验、流控制等)。这个版本的t i p 支持六种不同的拨号单元和调制解调器,如要支持其他
种类的调制解调器则要修改源码。
与c u和t i p 一样,U U C P 系统也可以使用调制解调器和自动拨号单元。 U U C P 对不同的调制
解调器进行加锁,因此多个 U U C P 的实例可以同时运行。这样, t i p 和c u 程序就不得不遵循
U U C P 协议,避免与U U C P 冲突。在B S D系统中,U U C P 使用了它自己的拨号函数。这些函数被
连接到U U C P 的可执行程序中,这样增加新的调制解调器也需要修改源码。
S V R 2 提供了一个d i a l ( 3 ) 函数来将调制解调器拨号的一致特性归纳到一个库函数中。这个
函数由c u使用,但U U C P 不使用。这是一个标准的C库函数,所以可以被一般程序使用。
Honey DanBer UUCP系统是将调制解调器命令从 C源程序中抽取出来,将它们放在一个
D i a l e r s文件中。这就允许不修改源码就可以加入新类型的调制解调器。但是 c u和U U C P 所使用
的访问D i a l e r s文件的函数不是很通用。这说明 c u 和U U C P可以不重新开发代码去处理 D i a l e r s文
件中的拨号信息,但除了c u 和U U C P 以外的程序并不能使用这个文件。
在所有这些版本的c u、t i p和U U C P中,加锁保证了在同一时间只有一个程序使用某一设备。
因为这些程序工作在不同系统中,早期的版本不提供记录锁,而使用一个早期形式的文件加锁,
这会导致当一个程序崩溃时,该锁文件仍旧保留,所以又开发特殊的技术来处理这种情况。
(对特殊设备文件不能使用记录锁,所以记录锁也不能完全解决问题)。
评论2