版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程的軟中斷通信與管道通信
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)題目
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)論文
- 操作系統(tǒng)課程設(shè)計(jì) (4)
- 操作系統(tǒng)課程設(shè)計(jì)1
- 課程設(shè)計(jì)報(bào)告--操作系統(tǒng)
- linux操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)原理課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬操作系統(tǒng)的實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論