操作系統(tǒng)-管道通信課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  《計(jì)算機(jī)操作系統(tǒng)》課程設(shè)計(jì)報(bào)告</p><p>  課程名稱(chēng): 操作系統(tǒng) </p><p>  設(shè)計(jì)題目: 管道通信 </p><p>  指導(dǎo)教師: ******* </p><

2、;p>  班 級(jí): ******* </p><p>  學(xué) 號(hào): ***** </p><p>  學(xué)生姓名: ***   </p><p>  同組人員: ******************* </p>

3、<p>  計(jì)算機(jī)科學(xué)與工程學(xué)院</p><p>  2014年6月19 日</p><p><b>  前言:</b></p><p>  Linux操作系統(tǒng)是一個(gè)向用戶開(kāi)放源碼的免費(fèi)的類(lèi)UNIX操作系統(tǒng)。它為在校學(xué)生學(xué)習(xí)操作系統(tǒng)課程提供了一個(gè)看得見(jiàn)摸得著的范例。對(duì)于學(xué)生正確理解,掌握操作系統(tǒng)的基本知識(shí)具有重要意義。鑒于此,本操作系

4、統(tǒng)課程涉及的實(shí)驗(yàn)均在Linux環(huán)境下進(jìn)行。</p><p><b>  這就要求大家:</b></p><p>  (1)熟悉Linux的操作和開(kāi)發(fā)環(huán)境;</p><p>  (2)具有C語(yǔ)言知識(shí)(Linux操作系統(tǒng)大約90%的源碼是用C語(yǔ)言編寫(xiě))。</p><p>  我們的設(shè)計(jì)和實(shí)驗(yàn)將在Windows xp環(huán)境下,基

5、于虛擬機(jī)軟件VMWare軟件進(jìn)行安裝。</p><p>  學(xué)習(xí)計(jì)算機(jī)軟件技術(shù),特別是計(jì)算機(jī)操作系統(tǒng)技術(shù),除了需要刻苦努力外,還需要掌握軟件和操作系統(tǒng)的原理與設(shè)計(jì)技巧。如何學(xué)習(xí)和掌握操作系統(tǒng)技術(shù)的原理與實(shí)際技巧呢?除了聽(tīng)課和讀書(shū)之外,最好的方法恐怕就是在實(shí)踐中練習(xí)。例如,自己設(shè)計(jì)一個(gè)小型操作系統(tǒng),多使用操作系統(tǒng),多閱讀和分析操作源代碼等。但由于我們的條件和學(xué)時(shí)有限,在理論學(xué)習(xí)過(guò)程中沒(méi)有給同學(xué)們提供更多的實(shí)驗(yàn)機(jī)會(huì)。

6、</p><p>  管道通信,通過(guò)在兩個(gè)進(jìn)程間創(chuàng)建通道,一個(gè)寫(xiě)信息通過(guò)通道傳送給另一個(gè)進(jìn)程并且讀出來(lái),同過(guò)實(shí)踐讓我們了解了什么是管道通信機(jī)制,實(shí)現(xiàn)了程序進(jìn)程間的通信。積極通過(guò)合作,完成任務(wù)。</p><p><b>  目 錄</b></p><p>  第一章 :系統(tǒng)環(huán)境4</p><p><b>

7、  1.1硬件環(huán)境4</b></p><p><b>  1.2軟件環(huán)境4</b></p><p>  第二章 :設(shè)計(jì)目的4</p><p>  第三章 :總體設(shè)計(jì)5</p><p>  3.1程序設(shè)計(jì)組成框圖5</p><p><b>  3.2流程圖6<

8、/b></p><p>  3.2.1匿名管道通信C/S流程圖6</p><p>  3.2.2命名管道通信C/S流程圖6</p><p>  第四章 :詳細(xì)設(shè)計(jì)8</p><p>  4.1匿名管道通信8</p><p>  4.2命名管道通信10</p><p>  第五章

9、:調(diào)試與測(cè)試13</p><p>  第六章 :設(shè)計(jì)中遇到的問(wèn)題及解決方法15</p><p>  第七章 :源程序清單和執(zhí)行結(jié)果及分析16</p><p>  第八章 :總結(jié)20</p><p>  第九章 :參考文獻(xiàn)20</p><p><b>  :系統(tǒng)環(huán)境</b></p&g

10、t;<p><b>  1.1硬件環(huán)境</b></p><p>  Intel(R)Core?2 Duo CPU E7500 @2.93GHz 2.00GB內(nèi)存</p><p><b>  1.2軟件環(huán)境</b></p><p>  1)Microsoft Windows XP Professional 版

11、本2002 Service Pack 3</p><p>  2)Vmware Workstation 10.0.1 build-1379776</p><p>  3)Red Hat Linux 9</p><p><b> ?。涸O(shè)計(jì)目的</b></p><p>  實(shí)踐操作系統(tǒng)原理知識(shí),根據(jù)題目要求設(shè)計(jì)、實(shí)現(xiàn)進(jìn)程的管

12、道通信,并且在虛擬機(jī)中模擬的linux系統(tǒng)中運(yùn)行檢測(cè)。</p><p><b> ?。嚎傮w設(shè)計(jì)</b></p><p>  3.1程序設(shè)計(jì)組成框圖</p><p><b>  無(wú)名管道讀寫(xiě)示意圖</b></p><p><b>  命名管道操作示意圖</b></p>

13、<p><b>  3.2流程圖</b></p><p>  3.2.1匿名管道通信C/S流程圖</p><p>  3.2.2命名管道通信C/S流程圖</p><p><b>  FIFO寫(xiě)進(jìn)程:</b></p><p><b> ?。涸敿?xì)設(shè)計(jì)</b></

14、p><p><b>  4.1匿名管道通信</b></p><p>  管道用于不同進(jìn)程間通信。通常先創(chuàng)建一個(gè)管道,再通過(guò)fork函數(shù)創(chuàng)建一個(gè)子進(jìn)程,該子進(jìn)程會(huì)繼承父進(jìn)程創(chuàng)建的管道。注意事項(xiàng):必須在系統(tǒng)調(diào)用fork()前調(diào)用pipe(),否則子進(jìn)程將不會(huì)繼承文件描述符。否則,會(huì)創(chuàng)建兩個(gè)管道,因?yàn)楦缸舆M(jìn)程共享同一段代碼段,都會(huì)各自調(diào)用pipe(),即建立兩個(gè)管道,出現(xiàn)異常錯(cuò)

15、誤。 父進(jìn)程通過(guò)管道向服務(wù)器發(fā)布命令,然后由服務(wù)器執(zhí)行命令。</p><p><b>  1.fork()</b></p><p><b>  創(chuàng)建一個(gè)新進(jìn)程。</b></p><p>  用法:int fork()</p><p>  其中返回int取值意義如下:</p><

16、p>  0:創(chuàng)建子進(jìn)程,從子進(jìn)程返回的id值</p><p>  >0:從父進(jìn)程返回的子進(jìn)程id值</p><p><b>  -1:創(chuàng)建失敗</b></p><p>  2.lockf(files,function,size)</p><p>  用作鎖定文件的某些段或者整個(gè)文件。</p>&

17、lt;p><b>  頭文件:</b></p><p>  #include<unistd.h></p><p><b>  參數(shù)定義:</b></p><p>  int lockf(files,function,size);</p><p>  int files,funct

18、ion;</p><p>  long size;</p><p>  其中:files是文件描述符;function是鎖定和解鎖;1表示鎖定;0表示解鎖;Size是鎖定或解鎖的字節(jié)數(shù),若用0,表示從文件的當(dāng)前位置到文件尾。</p><p><b>  3.read</b></p><p>  功能:從描述符為filed

19、es的文件讀信息。</p><p><b>  用法:</b></p><p>  #include <unistd.h></p><p>  ssize_tread(int filedes, void *buff, size_t nbytes) ;</p><p>  返回:讀到的字節(jié)數(shù),若已到文件尾為0

20、,若出錯(cuò)為-1。</p><p>  在UNIX/Linux 可重定義為: </p><p>  intread(int fd, char *buff, unsigned nbytes) ;</p><p><b>  4.write</b></p><p>  功能:向已打開(kāi)的文件寫(xiě)數(shù)據(jù)。</p>

21、<p><b>  用法:</b></p><p>  #include <unistd.h></p><p>  ssize_t write(int filedes, const void * buff, size_t nbytes) ;</p><p>  返回值:若成功為已寫(xiě)入的字節(jié)數(shù);出錯(cuò)為-1。</p&g

22、t;<p>  intwrite(int fd, char *buff, unsigned nbytes) ;</p><p><b>  文件位置指針</b></p><p>  文件位置指針:每個(gè)打開(kāi)文件都有一個(gè)與其相關(guān)聯(lián)的“當(dāng)前位移量”。是從文件開(kāi)始處計(jì)算的字節(jié)數(shù)。通常,讀、寫(xiě)操作都從當(dāng)前文件位置處開(kāi)始,并使位移量增加所讀或?qū)懙淖止?jié)數(shù)。&l

23、t;/p><p>  按系統(tǒng)默認(rèn),當(dāng)打開(kāi)一個(gè)文件時(shí),除非指定O_APPEND選擇項(xiàng),否則該位移量被設(shè)置為0,即指向文件的開(kāi)始處。</p><p>  文件位置指針可以通過(guò)系統(tǒng)調(diào)用lseek來(lái)移動(dòng)。</p><p>  #include <unistd.h> </p><p>  #include <sys/types.h>

24、; </p><p>  #include <errno.h> </p><p>  #include <stdio.h> </p><p>  #include <string.h> </p><p>  #include <stdlib.h> </p><p&g

25、t;<b>  /* </b></p><p><b>  * 程序入口 </b></p><p><b>  * */ </b></p><p>  int main() </p><p><b>  { </b></p><p

26、>  int pipe_fd[2]; </p><p>  pid_t pid; </p><p>  char buf_r[100]; </p><p>  char* p_wbuf; </p><p>  int r_num; </p><p>  memset(buf_r,0,sizeof(buf

27、_r)); //對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法</p><p>  /*創(chuàng)建管道*/ </p><p>  if(pipe(pipe_fd)<0) </p><p><b>  { </b></p><p>  printf("pipe create error\n");

28、 </p><p>  return -1; </p><p><b>  } </b></p><p>  /*創(chuàng)建子進(jìn)程*/ </p><p>  if((pid=fork())==0) //子進(jìn)程執(zhí)行序列 </p><p><b>  { </b><

29、/p><p>  printf("\n"); </p><p>  close(pipe_fd[1]);//子進(jìn)程先關(guān)閉了管道的寫(xiě)端 </p><p>  sleep(2); /*讓父進(jìn)程先運(yùn)行,這樣父進(jìn)程先寫(xiě)子進(jìn)程才有內(nèi)容讀*/ </p><p>  if((r_num=read(pipe_fd[0],buf_r,10

30、0))>0) </p><p><b>  { </b></p><p>  printf("%d numbers read from the pipe is %s\n",r_num,buf_r); </p><p><b>  } </b></p><p>

31、  close(pipe_fd[0]); </p><p>  exit(0); </p><p><b>  } </b></p><p>  else if(pid>0) //父進(jìn)程執(zhí)行序列 </p><p><b>  { </b></p><p>  

32、close(pipe_fd[0]); //父進(jìn)程先關(guān)閉了管道的讀端 </p><p>  if(write(pipe_fd[1],"Hello",5)!=-1) </p><p>  printf("parent write1 Hello!\n"); </p><p>  if(write(pipe_fd[1],&quo

33、t; Pipe",5)!=-1) </p><p>  printf("parent write2 Pipe!\n"); </p><p>  close(pipe_fd[1]); </p><p>  waitpid(pid,NULL,0); /*等待子進(jìn)程結(jié)束*/ </p><p>  exit(0)

34、; </p><p><b>  } </b></p><p>  return 0; </p><p><b>  }</b></p><p>  4.2命名管道通信命名管道 :</p><p>  命名管道和無(wú)名管道基本相同,但也有不同點(diǎn):無(wú)名管道只能有父進(jìn)程使用

35、;但是通過(guò)命名管道,不相關(guān)的進(jìn)程也能交換數(shù)據(jù)??蛻魴C(jī)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,服務(wù)器實(shí)現(xiàn)數(shù)據(jù)接收。</p><p><b>  1.創(chuàng)建</b></p><p>  用mkfifo或mknod創(chuàng)建一個(gè)命名管道。以mkfifo為例:</p><p>  #include<sys/types.h></p><p>  #

36、include<sys/stat.h></p><p>  int mkfifo(const char *fifo_name, mode_t mode);//成功返回0,否則為-1</p><p><b>  2、使用</b></p><p>  管道一經(jīng)創(chuàng)建,就可向普通文件一樣使用??赏ㄟ^(guò)系統(tǒng)調(diào)用open,close,rea

37、d,write,unlink等進(jìn)行操作。</p><p><b>  FIFO讀進(jìn)程:</b></p><p>  #include <sys/types.h> </p><p>  #include <sys/stat.h> </p><p>  #include <errno.h&g

38、t; </p><p>  #include <fcntl.h> </p><p>  #include <stdio.h> </p><p>  #include <stdlib.h> </p><p>  #include <string.h> </p><p&

39、gt;  #define FIFO "myfifo" </p><p><b>  /*程序入口*/</b></p><p>  int main(int argc,char** argv) </p><p><b>  { </b></p><p>  char buf_

40、r[100]; </p><p>  int fd; </p><p>  int nread; </p><p>  printf("Preparing for reading bytes...\n"); </p><p>  memset(buf_r,0,sizeof(buf_r)); </p>

41、;<p><b>  /*打開(kāi)管道*/ </b></p><p>  fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); </p><p>  if(fd==-1) </p><p><b>  { </b></p><p>  perror("o

42、pen"); </p><p>  exit(1); </p><p><b>  } </b></p><p>  while(1) </p><p><b>  { </b></p><p>  memset(buf_r,0,sizeof(bu

43、f_r)); </p><p>  if((nread=read(fd,buf_r,100))==-1) </p><p><b>  { </b></p><p>  if(errno==EAGAIN) </p><p>  printf("no data yet\n"); </p&

44、gt;<p><b>  } </b></p><p>  printf("read %s from FIFO\n",buf_r); </p><p>  sleep(1); </p><p><b>  } </b></p><p>  /*后面三句話是

45、不會(huì)被運(yùn)行到的,但不會(huì)影響程序運(yùn)行的效果當(dāng)程序在上面的死循環(huán)中執(zhí)行時(shí)收到信號(hào)后會(huì)馬上結(jié)束運(yùn)行而沒(méi)有執(zhí)行后面的三句話。*/ </p><p>  close(fd); //關(guān)閉管道</p><p>  pause(); //暫停,等待信號(hào)</p><p>  unlink(FIFO); //刪除文件 </p><p><b> 

46、 } </b></p><p><b>  FIFO寫(xiě)進(jìn)程:</b></p><p>  #include <sys/types.h> </p><p>  #include <sys/stat.h> </p><p>  #include <errno.h> <

47、;/p><p>  #include <fcntl.h> </p><p>  #include <stdio.h> </p><p>  #include <stdlib.h> </p><p>  #include <string.h> </p><p>  #d

48、efine FIFO_SERVER "myfifo" </p><p><b>  /* </b></p><p><b>  * 程序入口 </b></p><p><b>  * */ </b></p><p>  int main(int argc

49、,char** argv) </p><p><b>  { </b></p><p><b>  int fd; </b></p><p>  char w_buf[100]; </p><p>  int nwrite; </p><p>  /*創(chuàng)建有名管道*

50、/ </p><p>  if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST)) </p><p><b>  { </b></p><p>  printf("cannot create fifoserver\n");

51、 </p><p><b>  } </b></p><p>  /*打開(kāi)管道*/ </p><p>  fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); </p><p>  if(fd==-1) </p><p><b>  { &

52、lt;/b></p><p>  perror("open"); </p><p>  exit(1); </p><p><b>  } </b></p><p>  /*入?yún)z測(cè)*/ </p><p>  if(argc==1) </p>&l

53、t;p><b>  { </b></p><p>  printf("Please send something\n"); </p><p>  exit(-1); </p><p><b>  } </b></p><p>  strcpy(w_buf,argv[

54、1]); </p><p>  /* 向管道寫(xiě)入數(shù)據(jù) */ </p><p>  if((nwrite=write(fd,w_buf,100))==-1) </p><p><b>  { </b></p><p>  if(errno==EAGAIN) </p><p>  print

55、f("The FIFO has not been read yet.Please try later\n"); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p>&l

56、t;p>  printf("write %s to the FIFO\n",w_buf); </p><p><b>  } </b></p><p>  close(fd); //關(guān)閉管道 </p><p>  return 0; </p><p><b>  } <

57、/b></p><p><b> ?。赫{(diào)試與測(cè)試</b></p><p>  運(yùn)行匿名管道通信以及運(yùn)行命名管道通信讀進(jìn)程結(jié)果如下:</p><p>  打開(kāi)另外一個(gè)終端,運(yùn)行寫(xiě)進(jìn)程結(jié)果如下:</p><p>  同時(shí)讀進(jìn)程結(jié)果發(fā)生變化如下:</p><p> ?。涸O(shè)計(jì)中遇到的問(wèn)題及解決方法&

58、lt;/p><p>  1、 由于課程涉及UNIX管道通信模式較少,剛開(kāi)始做課程設(shè)計(jì)時(shí)感覺(jué)無(wú)從下手,后來(lái)通過(guò)看書(shū)以及上網(wǎng)查詢相關(guān)資料有些頭緒。</p><p>  2、對(duì)于虛擬機(jī)與主機(jī)的交互搞了好久但是最后結(jié)果不理想,也沒(méi)搞成功,試了用ftp方式相互連接,以及通過(guò)VMware Tools也沒(méi)有成功。后來(lái),通過(guò)問(wèn)學(xué)長(zhǎng)和同學(xué)終于解決了。通過(guò)此事,我知道知識(shí)自己主動(dòng)探索實(shí)踐固然好,但學(xué)習(xí)他人已有的經(jīng)

59、驗(yàn)學(xué)的知識(shí)更多更快。</p><p>  3、對(duì)于C語(yǔ)言中open、write等函數(shù)掌握的并不好,這是由于長(zhǎng)期不聯(lián)系C語(yǔ)言所致,一門(mén)語(yǔ)言要想精通必須通過(guò)不斷的聯(lián)系才行。</p><p> ?。涸闯绦蚯鍐魏蛨?zhí)行結(jié)果及分析</p><p>  任務(wù)1:匿名管道通信</p><p>  #include <unistd.h> <

60、/p><p>  #include <sys/types.h> </p><p>  #include <errno.h> </p><p>  #include <stdio.h> </p><p>  #include <string.h> </p><p>  

61、#include <stdlib.h> </p><p><b>  /* </b></p><p><b>  * 程序入口 </b></p><p><b>  * */ </b></p><p>  int main() </p><

62、p><b>  { </b></p><p>  int pipe_fd[2]; </p><p>  pid_t pid; </p><p>  char buf_r[100]; </p><p>  char* p_wbuf; </p><p>  int r_num; &l

63、t;/p><p>  memset(buf_r,0,sizeof(buf_r)); </p><p>  /*創(chuàng)建管道*/ </p><p>  if(pipe(pipe_fd)<0) </p><p><b>  { </b></p><p>  printf("pipe c

64、reate error\n"); </p><p>  return -1; </p><p><b>  } </b></p><p>  /*創(chuàng)建子進(jìn)程*/ </p><p>  if((pid=fork())==0) //子進(jìn)程執(zhí)行序列 </p><p><b&g

65、t;  { </b></p><p>  printf("\n"); </p><p>  close(pipe_fd[1]);//子進(jìn)程先關(guān)閉了管道的寫(xiě)端 </p><p>  sleep(2); /*讓父進(jìn)程先運(yùn)行,這樣父進(jìn)程先寫(xiě)子進(jìn)程才有內(nèi)容讀*/ </p><p>  if((r_num=rea

66、d(pipe_fd[0],buf_r,100))>0) </p><p><b>  { </b></p><p>  printf("%d numbers read from the pipe is %s\n",r_num,buf_r); </p><p><b>  } </b>

67、</p><p>  close(pipe_fd[0]); </p><p>  exit(0); </p><p><b>  } </b></p><p>  else if(pid>0) //父進(jìn)程執(zhí)行序列 </p><p><b>  { </b>&l

68、t;/p><p>  close(pipe_fd[0]); //父進(jìn)程先關(guān)閉了管道的讀端 </p><p>  if(write(pipe_fd[1],"Hello",5)!=-1) </p><p>  printf("parent write1 Hello!\n"); </p><p>  if(

69、write(pipe_fd[1]," Pipe",5)!=-1) </p><p>  printf("parent write2 Pipe!\n"); </p><p>  close(pipe_fd[1]); </p><p>  waitpid(pid,NULL,0); /*等待子進(jìn)程結(jié)束*/ </p>

70、;<p>  exit(0); </p><p><b>  } </b></p><p>  return 0; </p><p><b>  } </b></p><p>  任務(wù)2:命名管道通信</p><p><b>  FIFO讀進(jìn)程

71、:</b></p><p>  #include <sys/types.h> </p><p>  #include <sys/stat.h> </p><p>  #include <errno.h> </p><p>  #include <fcntl.h> </p

72、><p>  #include <stdio.h> </p><p>  #include <stdlib.h> </p><p>  #include <string.h> </p><p>  #define FIFO "/tmp/myfifo" </p><

73、p><b>  /*程序入口*/</b></p><p>  int main(int argc,char** argv) </p><p><b>  { </b></p><p>  char buf_r[100]; </p><p>  int fd; </p>

74、<p>  int nread; </p><p>  printf("Preparing for reading bytes...\n"); </p><p>  memset(buf_r,0,sizeof(buf_r)); </p><p><b>  /*打開(kāi)管道*/ </b></p>

75、<p>  fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); </p><p>  if(fd==-1) </p><p><b>  { </b></p><p>  perror("open"); </p><p>  exit(1); <

76、/p><p><b>  } </b></p><p>  while(1) </p><p><b>  { </b></p><p>  memset(buf_r,0,sizeof(buf_r)); </p><p>  if((nread=read(fd,buf_r

77、,100))==-1) </p><p><b>  { </b></p><p>  if(errno==EAGAIN) </p><p>  printf("no data yet\n"); </p><p><b>  } </b></p><

78、p>  printf("read %s from FIFO\n",buf_r); </p><p>  sleep(1); </p><p><b>  } </b></p><p>  /*后面三句話是不會(huì)被運(yùn)行到的,但不會(huì)影響程序運(yùn)行的效果當(dāng)程序在上面的死循環(huán)中執(zhí)行時(shí)收到信號(hào)后會(huì)馬上結(jié)束運(yùn)行而沒(méi)有執(zhí)行后面的

79、三句話。*/ </p><p>  close(fd); //關(guān)閉管道</p><p>  pause(); //暫停,等待信號(hào)</p><p>  unlink(FIFO); //刪除文件 </p><p><b>  } </b></p><p><b>  FIFO寫(xiě)進(jìn)程:&

80、lt;/b></p><p>  #include <sys/types.h> </p><p>  #include <sys/stat.h> </p><p>  #include <errno.h> </p><p>  #include <fcntl.h> </p&g

81、t;<p>  #include <stdio.h> </p><p>  #include <stdlib.h> </p><p>  #include <string.h> </p><p>  #define FIFO_SERVER "/tmp/myfifo" </p>

82、<p><b>  /* </b></p><p><b>  * 程序入口 </b></p><p><b>  * */ </b></p><p>  int main(int argc,char** argv) </p><p><b>  {

83、 </b></p><p><b>  int fd; </b></p><p>  char w_buf[100]; </p><p>  int nwrite; </p><p>  /*創(chuàng)建有名管道*/ </p><p>  if((mkfifo(FIFO_SERVER,

84、O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST)) </p><p><b>  { </b></p><p>  printf("cannot create fifoserver\n"); </p><p><b>  } </b>&l

85、t;/p><p>  /*打開(kāi)管道*/ </p><p>  fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); </p><p>  if(fd==-1) </p><p><b>  { </b></p><p>  perror("open

86、"); </p><p>  exit(1); </p><p><b>  } </b></p><p>  /*入?yún)z測(cè)*/ </p><p>  if(argc==1) </p><p><b>  { </b></p><p&

87、gt;  printf("Please send something\n"); </p><p>  exit(-1); </p><p><b>  } </b></p><p>  strcpy(w_buf,argv[1]); </p><p>  /* 向管道寫(xiě)入數(shù)據(jù) */ </

88、p><p>  if((nwrite=write(fd,w_buf,100))==-1) </p><p><b>  { </b></p><p>  if(errno==EAGAIN) </p><p>  printf("The FIFO has not been read yet.Please try

89、 later\n"); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  printf("write %s to the FIFO\n"

90、;,w_buf); </p><p><b>  } </b></p><p>  close(fd); //關(guān)閉管道 </p><p>  return 0; </p><p><b>  } </b></p><p><b>  :總結(jié)</b&g

91、t;</p><p>  此次課程設(shè)計(jì)—管道通信,讓我實(shí)實(shí)在在地鍛煉了自己的動(dòng)手能力,基本操作以熟練掌握。設(shè)計(jì)中地任務(wù)一比較簡(jiǎn)單,只是設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)管道通信,通過(guò)查資料可以順利完成;但是任務(wù)二—命名管道設(shè)計(jì),涉及到了頭文件、服務(wù)器程序和客戶端程序,三者要在同一臺(tái)計(jì)算機(jī)中,兩個(gè)不同的終端上實(shí)現(xiàn)通信。服務(wù)器程序設(shè)計(jì)操作中沒(méi)有出現(xiàn)什么問(wèn)題,但是在連接客戶端程序時(shí),客戶端程序出錯(cuò),編譯出現(xiàn)錯(cuò)誤,導(dǎo)致通信出現(xiàn)錯(cuò)誤。通過(guò)向

92、老師請(qǐng)教和同學(xué)詢問(wèn),基本有些了解,但還是出現(xiàn)一些解決不了的問(wèn)題,還需要多加聯(lián)系然后多查資料,認(rèn)真克服困難。</p><p>  通過(guò)這次課程設(shè)計(jì),我感覺(jué)到了,編程還是很有趣的一件事情,這次設(shè)計(jì)充分鍛煉了我的動(dòng)手能力,思維能力,設(shè)計(jì)能力,更重要的是合作精神,大家基礎(chǔ)都有點(diǎn)差,但可以主動(dòng)找不足,主動(dòng)查詢資料,詢問(wèn)同學(xué)和請(qǐng)教老師,充分體現(xiàn)了新時(shí)代新青年的團(tuán)結(jié)和探索精神。</p><p><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論