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

📄 00000001.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>&nbsp;<BR>&nbsp;&nbsp;在&nbsp;UNIX&nbsp;系统发展应用程式入门(一)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王志祥&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>序言:&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同学们可能或多或少在网路上抓过UNIX&nbsp;或&nbsp;X&nbsp;视窗的应用程式,&nbsp;<BR>你是否曾想过这些程式是如何写的?或者更进一步,你是否也想自己写一个&nbsp;<BR>大家都有兴趣去用的程式?不但可出名又可训练自己的程式设计能力.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;DOS&nbsp;之下,可能大部分的人写应用程式都没问题.可是换到&nbsp;UNIX&nbsp;<BR>之後可能就因不熟悉而不会写了.本文即是以笔者上学期所写之&nbsp;UNIX&nbsp;<BR>应用程式:&nbsp;FindMan&nbsp;作为□例,期收抛砖引玉之效.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>关於&nbsp;FindMan:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindMan&nbsp;是一集合&nbsp;FindMan&nbsp;、ScanGirl&nbsp;、CScanGirl&nbsp;三项&nbsp;Utility&nbsp;<BR>为一体的程式.&nbsp;&nbsp;当初发展&nbsp;FindMan&nbsp;的动机是由於上机人数太多,往往为了&nbsp;<BR>找一个人而伤眼睛地用力看&nbsp;rusers&nbsp;的输出.於是开始写&nbsp;FindMan&nbsp;.&nbsp;而当时正逢&nbsp;<BR>HuntGirl(u8011093)&nbsp;、Hunt(u7917043)&nbsp;相继推出,由於正合交大大多数男生&nbsp;<BR>的需求,因此造成轰动.本程式为了顺应潮流,加入了&nbsp;ScanGirl&nbsp;<BR>及&nbsp;CScangirl&nbsp;(&nbsp;ScanGirl&nbsp;中文版&nbsp;).&nbsp;由於处理程序类似,&nbsp;因此合并成一个程式,&nbsp;<BR>而以&nbsp;link(UNIX&nbsp;Command:&nbsp;ln)&nbsp;连结各项程式,程式再以第一个字母判断该执行何项程序.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindMan&nbsp;自开放使用以来,目前每个月皆被使用了&nbsp;6000&nbsp;次以上.&nbsp;其中有一个&nbsp;<BR>有趣现象,&nbsp;最初一个月,&nbsp;ScanGirl&nbsp;的使用率是&nbsp;FindMan&nbsp;的两倍,後来&nbsp;FindMan&nbsp;逐&nbsp;<BR>渐追上&nbsp;ScanGirl,&nbsp;现在&nbsp;FindMan&nbsp;:&nbsp;ScanGirl&nbsp;的使用率是&nbsp;5:1&nbsp;(FindMan&nbsp;5xxx&nbsp;次).&nbsp;<BR>这现象似乎显示交大人已不在如以前那样喜欢和女孩子&nbsp;talk&nbsp;了.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>有关在&nbsp;UNIX&nbsp;上写应用程式的技巧和注意事项:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;UNIX&nbsp;上写应用程式与在&nbsp;DOS&nbsp;下写程式不一样的地方有几点:&nbsp;<BR>1.&nbsp;UNIX&nbsp;的&nbsp;Signal&nbsp;相当於&nbsp;DOS&nbsp;的&nbsp;Interrupt.&nbsp;<BR>2.&nbsp;UNIX&nbsp;有许多系统呼叫,可以做低阶的动作.&nbsp;<BR>3.&nbsp;UNIX&nbsp;是多工的作业系统,我们可善用&nbsp;UNIX&nbsp;的这项能力.&nbsp;<BR>4.&nbsp;UNIX&nbsp;有程序间通讯的能力,&nbsp;它可做各多工程序间、甚至各工作站间的沟通.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然,&nbsp;UNIX&nbsp;的功能不只这&nbsp;4&nbsp;点,&nbsp;读者以後可以後慢慢体会.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>FindMan&nbsp;的&nbsp;Initial&nbsp;部份:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由於&nbsp;FindMan&nbsp;主程式太长(共&nbsp;10&nbsp;页),而且其中有些部份如不了解就不要使用,&nbsp;<BR>否则系统可能会&nbsp;...,而你的&nbsp;account&nbsp;就可能会&nbsp;...,(当然,此一部份我会特别注明.)&nbsp;<BR>所以,我只会附上重要部份的程式.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下我会列出程式片段,&nbsp;与比较奇特的变数宣告.&nbsp;读者们最好遇到没看&nbsp;<BR>过的命令时,&nbsp;在&nbsp;UNIX&nbsp;里用&nbsp;man&nbsp;查.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;passwd&nbsp;*p;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid_t&nbsp;uid;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid&nbsp;=&nbsp;getuid();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(p&nbsp;=&nbsp;getpwuid(uid)))&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Can't&nbsp;get&nbsp;user&nbsp;name&nbsp;!!\n&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(uname,p-&gt;pw_name);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gethostname(hsnm,sizeof(hsnm));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;getlogin()&nbsp;==&nbsp;NULL&nbsp;)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;This&nbsp;program&nbsp;is&nbsp;avai&nbsp;.......&nbsp;is&nbsp;program.....&nbsp;\n&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上此部份是取得使用者的帐号(account)&nbsp;与执行&nbsp;FindMan&nbsp;时的工作站名称.&nbsp;<BR>并判断使用者是否真的在线上(OnLine),&nbsp;以&nbsp;getlogin()&nbsp;判断使用者若不在线上,&nbsp;<BR>则不让不在线上的使用者执行.&nbsp;此法可防止使用者使用&nbsp;rsh、at、cron&nbsp;等命令.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再来是以执行档第一个英文字判断该&nbsp;show&nbsp;哪一种讯息、该执行哪一种程&nbsp;<BR>式(记录在一个变数里,以此变数判断).&nbsp;此部份简单,不再赘述.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接著是程式後的参数判断,程式如下:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((n&nbsp;=&nbsp;getopt(argc,argv,&quot;af:h&quot;))&nbsp;!=&nbsp;EOF)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(n)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'a':&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;aflg++;&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;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'f':&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;fflg++;&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;hostfl=optarg;&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;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'h':&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;if&nbsp;(aflg&nbsp;||&nbsp;fflg&nbsp;||&nbsp;lflg&nbsp;||&nbsp;Hflg)&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;errflg++;&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;else&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;hflg++;&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;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&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;errflg++;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(errflg)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\nUsage:&nbsp;%s&nbsp;[-a]&nbsp;[-h]&nbsp;[-H]&nbsp;[-f&nbsp;FindHostName's&nbsp;FILE]\n&quot;,argv[0]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-h&nbsp;:&nbsp;short&nbsp;help\n&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-H&nbsp;:&nbsp;detail&nbsp;help\n&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hflg)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\nUsage:&nbsp;%s&nbsp;[-a]&nbsp;[-h]&nbsp;[-H]&nbsp;[-f&nbsp;FindHostName's&nbsp;FILE]\n&quot;,argv[0]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程式中的&nbsp;getopt()&nbsp;之中的&nbsp;&quot;af:h&quot;&nbsp;是参数的字.&nbsp;其中的&nbsp;':'&nbsp;表示参数&nbsp;<BR>之後还要加的东东.&nbsp;例如&nbsp;-f&nbsp;之後还要加&nbsp;FindHostName's&nbsp;FILE,&nbsp;所以&nbsp;f&nbsp;之後要有&nbsp;':'.&nbsp;<BR>附带一提,这里所介绍的功能,虽然&nbsp;FindMan&nbsp;也会&nbsp;Show&nbsp;出,但大部分皆为保留功能,&nbsp;<BR>并不能使用,&nbsp;必须等我有空实在加上.届时我会&nbsp;announce.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这部份所用的技巧可使程式能提供使用者多样的选择.程式中的&nbsp;aflg、fflg&nbsp;<BR>等皆为旗标变数.&nbsp;它可记录参数的状况.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再下来是根据变数决定程式要读取的&nbsp;database(有&nbsp;.look&nbsp;及我的中英文&nbsp;<BR>&nbsp;girl&nbsp;database),&nbsp;并记录到我的记录档里.此部份程式亦略去不提.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接下来是&nbsp;UNIX&nbsp;的&nbsp;Signal&nbsp;之运用和子程序的建立.&nbsp;当初之所以使用&nbsp;fork&nbsp;<BR>建立许多子程序并使用复杂且吃&nbsp;Load&nbsp;的程序间通讯,&nbsp;是因为如此可以家快速度.&nbsp;<BR>由於有时会有一些工作站当掉或无法回应&nbsp;rusers&nbsp;的&nbsp;request,这些工作站即会&nbsp;<BR>延迟&nbsp;rusers&nbsp;□集资料的时间.&nbsp;我的程式即可部份解决这个问题.&nbsp;由主程序&nbsp;fork&nbsp;出&nbsp;<BR>去的各子程序各自&nbsp;rusers&nbsp;一个工作站,先得到资料的程序先向主程序传送.&nbsp;<BR>(程序间传送需用程序间通讯的技巧)&nbsp;如此就可不管那些不传资料的工作站了.&nbsp;<BR>所以我的&nbsp;FindMan&nbsp;常不按顺序&nbsp;show&nbsp;各工作站的资讯後,停了很久才结束便是&nbsp;<BR>这个道理.&nbsp;知道原理後,下次看到讯息出完停下时,不必苦等而可以&nbsp;Ctrl-C&nbsp;取&nbsp;<BR>而代之.&nbsp;现在由於计中的&nbsp;rusers&nbsp;改良过而不必再苦等.因此利用此技巧取代&nbsp;<BR>复杂且耗&nbsp;Load&nbsp;的程序间通讯便成为我的下一个课题.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;□话少说,看下面的程式:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGCLD,&nbsp;SIG_IGN);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGINT,&nbsp;timeout);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt;CM;&nbsp;i++)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((pid&nbsp;=&nbsp;fork())&nbsp;==&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pitch(hosts[i]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pid&nbsp;!=&nbsp;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpp[0]=(char)0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpp[1]='\0';&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(tmpp);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((short)tmpp[0])&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;There&nbsp;are&nbsp;%d&nbsp;workstation&nbsp;responding&nbsp;fail...\n&quot;,tmpp[0]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&nbsp;Fail&nbsp;workstation:&nbsp;%s\n&quot;,&amp;tmpp[1]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前两个&nbsp;Signal,第一个的意义是忽略子程序结束的讯号.而第二个的意义是&nbsp;<BR>遇到&nbsp;Ctrl-C&nbsp;之类的中断时要执行&nbsp;timeout()&nbsp;函数.而底下则是用&nbsp;fork()&nbsp;产生&nbsp;<BR>子程序,有关&nbsp;fork()&nbsp;的意义与用法,请自行参考资料.&nbsp;程式中的&nbsp;catch()&nbsp;是我定义&nbsp;<BR>的函数,下次再说.而&nbsp;tmpp[0]&nbsp;则是用来判断工作站是否有&nbsp;respond.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>结语:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由於篇幅及时间因素,本文在此告一段落&nbsp;,下期再继续.若有任何建议,欢迎用&nbsp;<BR>E-Mail&nbsp;寄到&nbsp;<A HREF="mailto:u7911093@cc.nctu.edu.tw">u7911093@cc.nctu.edu.tw</A>&nbsp;.&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

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