-
直接转换方法:将拨号调制解调器的数据流图转化为模块结构图
资源介绍
18.3 程序设计
我们来分析一下调制解调器拨号器所应该具有的特性:
(1) 它必须在不改动源码的情况下支持新增加的调制解调器类型。
为了达到这个目标,我们使用了Honey DanBer的D i a l e r s文件。我们将所有使用这个文件来
拨号调制解调器的代码都放到一个精灵进程服务器中,这样任何程序都可以使用 1 5 . 5节中的客
户机-服务器函数来访问它。
(2) 一定要使用一些特定形式的锁,以保证当那些持有锁的程序在非正常结束时能自动释
放它的锁。以前那些专门的技术,如那些在大多数 c u和U U C P版本中仍然使用的技术,都不应
再使用。
我们用一个服务器精灵进程来处理所有的设备加锁。因为 1 5 . 5节中的客户机 -服务器函数会
在客户机终止时自动通知服务器,所以这个精灵进程能释放进程所持有的任何加锁。
(3) 新的程序一定要能够使用我们所开发的所有特性。开发一个新的处理调制解调器的程
序不应当什么都要自己实现,它拨任何类型的调制解调器应该就像函数调用一样简单方便。为
此,我们让*服务器精灵进程处理所有与拨号有关的操作,并返回一个文件描述符。
(4) 客户机程序,例如 c u和t i p,不应当需要特别权限。这些程序不应当是设置 -用户- I D程
序。但是要给予服务器精灵进程特殊权限,允许客户机程序运行时无需特权。
显然我们不能改动已有的 c u、t i p和U U C P程序,但应该让其他程序在我们工作的基础上实
现起来更加简单。当然,我们也一定要充分吸取已有的 UNIX 拨号程序的优点。
图1 8 - 1描述了客户机 -服务器工作模式的结构。
图18-1 客户机-服务器工作模式示意图
建立与远程系统的通信过程如下:
(1) 起动服务器。
(2) 客户机起动,使用c l i _ c o n n函数(见1 5 . 5节)建立与服务器的连接。客户机向服务器发
出一个请求,请求拨号远程系统。
(3) 服务器读取S y s t e m s、D e v i c e s和D i a l e r s配置文件来决定如何拨号远程系统(下一节将讲
述这些文件)。如果正使用一个调制解调器,在对应的 D i a l e r s配置文件中就包含了这个特定调
制解调器的所有命令。
(4) 服务器打开该调制解调器设备并拨号该调制解调器。这需要一些时间(一般为1 5 ~ 3 0秒)。
服务器处理所有对该调制解调器的加锁,以避免各用户间的冲突。
(5) 如果拨号成功,服务器返回一个该调制解调器设备的文件描述符给客户机。在 1 5 . 3节
中的函数可以发送和接受这个描述符。
4 3 6 U N I X环境高级编程
服务器
(1) 请求访问远程系统 (4) 返回文件描述符
(3) 拨号调制解调器
调制解
调器
S y s t e m s、D e v i c e s和
D i a l e r s文件
客户机
(2)