⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000018.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
typedef&nbsp;struct&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;one&nbsp;Client&nbsp;struct&nbsp;per&nbsp;connected&nbsp;client&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;fd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;fd,&nbsp;or&nbsp;-1&nbsp;if&nbsp;available&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;pid_t&nbsp;pid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;child&nbsp;pid&nbsp;while&nbsp;dialing&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;uid_t&nbsp;uid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;client's&nbsp;user&nbsp;ID&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;childdone;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;nonzero&nbsp;when&nbsp;SIGCHLD&nbsp;from&nbsp;dialing&nbsp;child&nbsp;recvd:&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;means&nbsp;exit(0),&nbsp;2&nbsp;means&nbsp;exit(1)&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;long&nbsp;&nbsp;sysftell;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;next&nbsp;line&nbsp;to&nbsp;read&nbsp;in&nbsp;Systems&nbsp;file&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;long&nbsp;&nbsp;foundone;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;true&nbsp;if&nbsp;we&nbsp;find&nbsp;a&nbsp;matching&nbsp;sysfile&nbsp;entry&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;Debug;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;option&nbsp;from&nbsp;client&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;enum&nbsp;parity&nbsp;parity;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;option&nbsp;from&nbsp;client&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;speed[MAXSPEEDSTR];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;option&nbsp;from&nbsp;client&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;sysname[MAXSYSNAME];/*&nbsp;option&nbsp;from&nbsp;client&nbsp;*/&nbsp;&nbsp;<BR>}&nbsp;Client;&nbsp;&nbsp;<BR>extern&nbsp;Client&nbsp;&nbsp;&nbsp;*client;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;ptr&nbsp;to&nbsp;malloc'ed&nbsp;array&nbsp;of&nbsp;Client&nbsp;structs&nbsp;*/&nbsp;&nbsp;<BR>extern&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_size;/*&nbsp;#&nbsp;entries&nbsp;in&nbsp;client[]&nbsp;array&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(both&nbsp;manipulated&nbsp;by&nbsp;client_XXX()&nbsp;fun&nbsp;&nbsp;<BR>tions)&nbsp;*/&nbsp;&nbsp;<BR>typedef&nbsp;struct&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;everything&nbsp;for&nbsp;one&nbsp;entry&nbsp;in&nbsp;Systems&nbsp;file&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;system&nbsp;name&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*time;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(e.g.,&nbsp;&quot;Any&quot;)&nbsp;time&nbsp;to&nbsp;call&nbsp;(ignored)&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(e.g.,&nbsp;&quot;ACU&quot;)&nbsp;or&nbsp;system&nbsp;name&nbsp;if&nbsp;direct&nbsp;connect&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*class;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(e.g.,&nbsp;&quot;9600&quot;)&nbsp;speed&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*phone;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;phone&nbsp;number&nbsp;or&nbsp;&quot;-&quot;&nbsp;if&nbsp;direct&nbsp;connect&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*login;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;uucp&nbsp;login&nbsp;chat&nbsp;(ignored)&nbsp;*/&nbsp;&nbsp;<BR>}&nbsp;Systems;&nbsp;&nbsp;<BR>typedef&nbsp;struct&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;everything&nbsp;for&nbsp;one&nbsp;entry&nbsp;in&nbsp;Devices&nbsp;file&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(e.g.,&nbsp;&quot;ACU&quot;)&nbsp;matched&nbsp;by&nbsp;type&nbsp;in&nbsp;Systems&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*line;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(e.g.,&nbsp;&quot;cua0&quot;)&nbsp;without&nbsp;preceding&nbsp;&quot;/dev/&quot;&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*line2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(ignored)&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*class;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;matched&nbsp;by&nbsp;class&nbsp;in&nbsp;Systems&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*dialer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;name&nbsp;of&nbsp;dialer&nbsp;in&nbsp;Dialers&nbsp;*/&nbsp;&nbsp;<BR>}&nbsp;Devices;&nbsp;&nbsp;<BR>typedef&nbsp;struct&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;everything&nbsp;for&nbsp;one&nbsp;entry&nbsp;in&nbsp;Dialers&nbsp;file&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*dialer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;matched&nbsp;by&nbsp;dialer&nbsp;in&nbsp;Devices&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*sub;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;phone&nbsp;number&nbsp;substitution&nbsp;string&nbsp;(ignored)&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;char&nbsp;&nbsp;*expsend;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;expect/send&nbsp;chat&nbsp;*/&nbsp;&nbsp;<BR>}&nbsp;Dialers;&nbsp;&nbsp;<BR>extern&nbsp;Systems&nbsp;&nbsp;systems;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;filled&nbsp;in&nbsp;by&nbsp;sys_next()&nbsp;*/&nbsp;&nbsp;<BR>extern&nbsp;Devices&nbsp;&nbsp;devices;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;filled&nbsp;in&nbsp;by&nbsp;dev_next()&nbsp;*/&nbsp;&nbsp;<BR>extern&nbsp;Dialers&nbsp;&nbsp;dialers;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;filled&nbsp;in&nbsp;by&nbsp;dial_next()&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;our&nbsp;function&nbsp;prototypes&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child_dial(Client&nbsp;*);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;childdial.c&nbsp;*&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cli_args(int,&nbsp;char&nbsp;**);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;cliar&nbsp;&nbsp;<BR>s.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_add(int,&nbsp;uid_t);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;clien&nbsp;&nbsp;<BR>.c&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_del(int);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_sigchld(pid_t,&nbsp;int);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;loop.&nbsp;&nbsp;<BR>&nbsp;*/&nbsp;&nbsp;<BR>char&nbsp;&nbsp;&nbsp;&nbsp;*ctl_str(char);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;ctlst&nbsp;&nbsp;<BR>.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_find(Devices&nbsp;*,&nbsp;const&nbsp;Systems&nbsp;*);&nbsp;&nbsp;/*&nbsp;devfile.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_next(Devices&nbsp;*);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_rew(void);&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dial_find(Dialers&nbsp;*,&nbsp;const&nbsp;Devices&nbsp;*);&nbsp;/*&nbsp;dialfile.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dial_next(Dialers&nbsp;*);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dial_rew(void);&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expect_str(int,&nbsp;char&nbsp;*);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;expec&nbsp;&nbsp;<BR>str.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request(Client&nbsp;*);&nbsp;&nbsp;<BR>*&nbsp;request.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_str(int,&nbsp;char&nbsp;*,&nbsp;char&nbsp;*,&nbsp;int);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sendstr.c&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sig_chld(int);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sigch&nbsp;&nbsp;<BR>d.c&nbsp;*/&nbsp;&nbsp;<BR>long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_next(Systems&nbsp;*);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sysfile.c&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_posn(long);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_rew(void);&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tty_open(char&nbsp;*,&nbsp;char&nbsp;*,&nbsp;enum&nbsp;parity,&nbsp;int);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;ttyopen.c&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tty_dial(int,&nbsp;char&nbsp;*,&nbsp;char&nbsp;*,&nbsp;char&nbsp;*,&nbsp;char&nbsp;*);&nbsp;/*&nbsp;ttydial.c&nbsp;*/&nbsp;&nbsp;<BR>pid_t&nbsp;&nbsp;&nbsp;&nbsp;is_locked(char&nbsp;*);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;lock.&nbsp;&nbsp;<BR>&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock_set(char&nbsp;*,&nbsp;pid_t);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock_rel(pid_t);&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUG(char&nbsp;*,&nbsp;...);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;debug.c&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUG_NONL(char&nbsp;*,&nbsp;...);&nbsp;&nbsp;<BR>_______________________________________________________________________&nbsp;&nbsp;<BR>_______&nbsp;&nbsp;<BR>程序18.1&nbsp;&nbsp;call.h&nbsp;头文件&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们定义了一个Client结构,它包含了每一客户的所有信息。这是一个对程序&nbsp;&nbsp;<BR>15.26中类似结构的扩展。在创建一个子进程为客户端拨号和子进程终止之间,我&nbsp;&nbsp;<BR>们可以处理任意多的其他客户。这个结构同时包含了我们所需要的其他信息,如尝&nbsp;&nbsp;<BR>试找到Systems文件中的其他项,重新拨号等。&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们同样为Systems、Devices、Dialers文件中每一项定义了一个结构。&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;程序18.2&nbsp;是这个服务器端程序的main函数。因为这个程序一般是作为精灵进&nbsp;&nbsp;<BR>程运行,我们提供了一个&nbsp;-d&nbsp;的命令行选项,允许交互式运行。&nbsp;&nbsp;<BR>_______________________________________________________________________&nbsp;&nbsp;<BR>_______&nbsp;&nbsp;<BR>#include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;calld.h&quot;&nbsp;&nbsp;<BR>#include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;syslog.h&gt;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;define&nbsp;global&nbsp;variables&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clifd;&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug;&nbsp;&nbsp;/*&nbsp;daemon's&nbsp;command&nbsp;line&nbsp;flag&nbsp;*/&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug;&nbsp;&nbsp;/*&nbsp;Debug&nbsp;controlled&nbsp;by&nbsp;client,&nbsp;not&nbsp;cmd&nbsp;line&nbsp;*/&nbsp;&nbsp;<BR>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errmsg[MAXLINE];&nbsp;&nbsp;<BR>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*speed;&nbsp;&nbsp;<BR>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*sysname;&nbsp;&nbsp;<BR>uid_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid;&nbsp;&nbsp;<BR>Client&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*client&nbsp;=&nbsp;NULL;&nbsp;&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_size;&nbsp;&nbsp;<BR>Systems&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;systems;&nbsp;&nbsp;<BR>Devices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devices;&nbsp;&nbsp;<BR>Dialers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dialers;&nbsp;&nbsp;<BR>volatile&nbsp;sig_atomic_t&nbsp;chld_flag;&nbsp;&nbsp;<BR>enum&nbsp;parity&nbsp;parity&nbsp;=&nbsp;NONE;&nbsp;&nbsp;<BR>int&nbsp;&nbsp;<BR>main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_open(&quot;calld&quot;,&nbsp;LOG_PID,&nbsp;LOG_USER);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opterr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;don't&nbsp;want&nbsp;getopt()&nbsp;writing&nbsp;to&nbsp;stderr&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(&nbsp;(c&nbsp;=&nbsp;getopt(argc,&nbsp;argv,&nbsp;&quot;d&quot;))&nbsp;!=&nbsp;EOF)&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(c)&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'d':&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;debug&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug&nbsp;=&nbsp;1;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'?':&nbsp;&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -