




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、河南城建學(xué)院操作系統(tǒng)課程設(shè)計(jì)說明書設(shè)計(jì)題目: 管道通信 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師: 邵國金 郭猛 薛冰 班 級: 0814102 學(xué) 號: 081410217 姓 名: 金 賀 同 組 人: 李乾坤 邵光光 計(jì)算機(jī)科學(xué)與工程系2011年1 月 10 日前言課程設(shè)計(jì)是檢測學(xué)生課程效果的重要手段,是訓(xùn)練學(xué)生通過所學(xué)的知識解決實(shí)際問題的重要方式,同時也是實(shí)踐性教學(xué)中的一個重要環(huán)節(jié),它以某以課程為基礎(chǔ),可以涉及和課程相關(guān)的各個方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓學(xué)生對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識。操作系統(tǒng)是一門重要的專業(yè)課,是計(jì)算機(jī)理論和應(yīng)用的核心基
2、礎(chǔ)課程。操作系統(tǒng)課程設(shè)計(jì),是一次對多學(xué)知識的綜合演練,要求學(xué)生在操作系統(tǒng)的設(shè)計(jì)理念、整體機(jī)構(gòu)、模塊劃分、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面,加深對課程基本內(nèi)容的理解,同時,在課程設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面收到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。在這次的課程設(shè)計(jì)中我們選擇的題目是進(jìn)程間通信消息機(jī)制的設(shè)計(jì),實(shí)現(xiàn)消息的創(chuàng)建、發(fā)送和接收及在server端創(chuàng)建一個服務(wù)函數(shù),從而形成C/S通訊模式。消息機(jī)制是消息通過消息隊(duì)列的方式進(jìn)行進(jìn)程間消息的傳遞,通過此次課程設(shè)計(jì),全面理解消息機(jī)制進(jìn)程間通信方法。實(shí)現(xiàn)把死板的課本知識變得生動有趣,激發(fā)了學(xué)生的積極性。把學(xué)過的計(jì)算機(jī)操作系統(tǒng)的知識強(qiáng)化,能
3、夠把課堂上的知識通過自己設(shè)計(jì)的程序表示出來,加深了歲理論知識的理解目的。目 錄一、.4二、.4三、設(shè)計(jì)題目及要求.4(1)設(shè)計(jì)管道通信4(2)設(shè)計(jì)命名管道.4四、總體設(shè)計(jì).4五、詳細(xì)設(shè)計(jì).61、實(shí)現(xiàn)管道通信 .6 2、命名管道設(shè)計(jì) .8六、調(diào)試與測試方法.12七、執(zhí)行結(jié)果及分析.13八、源程序清單.14九、心得體會.19十、參考文獻(xiàn).19三、系統(tǒng)環(huán)境1、硬件環(huán)境:Intel(R)Core (TM)2 Duo CPU E7200 2.53GHz1.59GHz,2.00GB的內(nèi)存2、軟件環(huán)境 Microsoft Windows XPProfesstonal版本 2002Service Pack 3
4、 四、設(shè)計(jì)目的利用UNIX系統(tǒng)提供的管道機(jī)制實(shí)現(xiàn)進(jìn)程間的通信。(1)管道通信。利用pipe()和lockf()系統(tǒng)調(diào)用,編寫程序,實(shí)現(xiàn)同族進(jìn)程間的通信。使用系統(tǒng)調(diào)用pipe()建立一條管道線;創(chuàng)建子進(jìn)程P1,P2,。子進(jìn)程Pi分別向管道各寫信息,而父進(jìn)程則從管道中讀出來自于各子進(jìn)程的信息,實(shí)現(xiàn)進(jìn)程家族間無名管道通訊。擴(kuò)展之,使之成為客戶/服務(wù)器模式,并完成一定的任務(wù)(自己定義)。(2)命名管道通信:利用mkfifo(name,mode)或mknod(name,mode,0)創(chuàng)建一個命名管道,然后利用它和文件部分系統(tǒng)調(diào)用實(shí)現(xiàn)不同進(jìn)程間的通信。改造之,使之成為客戶/服務(wù)器模式,并完成一定的任務(wù)(自
5、己定義)。五、總體設(shè)計(jì)1.fork()創(chuàng)建一個新進(jìn)程。用法:int fork()其中返回int取值意義如下:0:創(chuàng)建子進(jìn)程,從子進(jìn)程返回的id值>0:從父進(jìn)程返回的子進(jìn)程id值-1:創(chuàng)建失敗2.lockf(files,function,size)用作鎖定文件的某些段或者整個文件。頭文件:#include<unistd.h>參數(shù)定義:int lockf(files,function,size);int files,function;long size;其中:files是文件描述符;function是鎖定和解鎖;1表示鎖定;0表示解鎖;Size是鎖定或解鎖的字節(jié)數(shù),若用0,表示從
6、文件的當(dāng)前位置到文件尾。3.read功能:從描述符為filedes的文件讀信息。用法:#include <unistd.h>ssize_tread(int filedes, void *buff, size_t nbytes) ;返回:讀到的字節(jié)數(shù),若已到文件尾為0,若出錯為-1。 在UNIX/Linux 可重定義為: intread(int fd, char *buff, unsigned nbytes) ;4.write功能:向已打開的文件寫數(shù)據(jù)。用法:#include <unistd.h>ssize_t write(int filedes, const void
7、* buff, size_t nbytes) ;返回值:若成功為已寫入的字節(jié)數(shù);出錯為-1。intwrite(int fd, char *buff, unsigned nbytes) ;文件位置指針文件位置指針:每個打開文件都有一個與其相關(guān)聯(lián)的“當(dāng)前位移量”。是從文件開始處計(jì)算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件位置處開始,并使位移量增加所讀或?qū)懙淖止?jié)數(shù)。按系統(tǒng)默認(rèn),當(dāng)打開一個文件時,除非指定O_APPEND選擇項(xiàng),否則該位移量被設(shè)置為0,即指向文件的開始處。文件位置指針可以通過系統(tǒng)調(diào)用lseek來移動。5.創(chuàng)建用mkfifo或mknod創(chuàng)建一個命名管道。以mkfifo為例:#include
8、<sys/types.h>#include<sys/stat.h>int mkfifo(const char *fifo_name, mode_t mode);/成功返回0,否則為-16 signal(sig,function)允許調(diào)用進(jìn)程控制軟中斷信號的處理。頭文件:#include<signal.h>參數(shù)定義signal(sig,function)intsig;void(*function)();返回值:成功時返回舊的(以前)函數(shù)描述,失敗時返回SIG_ERR。7、client、server可以以client/server方式使用FIFO。如果一個服務(wù)器
9、有多個客戶時,每個客戶可通過一個well_known FIFO服務(wù)器連接。連接后可以通過well_known FIFO向服務(wù)器發(fā)送請求,所發(fā)信息的長度必須PIPE_BUF (4096)。 流程圖初始化創(chuàng)建一個key為105、107 的消息隊(duì)列等待msgqid1發(fā)來消息存儲到文件 接收消息 顯示消息 向msgqid2發(fā)送收到命令 收到exit命令 掛起5秒 刪除消息隊(duì)列 退出消息的創(chuàng)建、發(fā)送和接收示意圖初始化創(chuàng)建子進(jìn)程server()創(chuàng)建成功? 由關(guān)鍵字獲得消息隊(duì)列從隊(duì)列接收消息消息類型i為1時,釋放隊(duì)列刪除隊(duì)列表項(xiàng) 退出 六 詳細(xì)設(shè)計(jì) 1、實(shí)現(xiàn)管道通信編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)
10、調(diào)用pipe()建立一條管道線。兩個子進(jìn)程p1和p2分別向管道各寫一句話:child 1 is sending message!child 2 is sending message!而父進(jìn)程則從管道中讀出來自于兩個子進(jìn)程的信息,顯示在屏幕上。<程序>#include <stdio.h> main() int i,r,p1,p2,fd2; char buf50,s50; pipe(fd); /創(chuàng)建匿名管道,fd0為讀端,fd1為寫端/while(p1=fork()=-1); /創(chuàng)建子進(jìn)程P1,直至成功為止(p1!=-1)/if(p1=0) /子進(jìn)程P1執(zhí)行邏輯/ lock
11、f(fd1,1,0); /鎖定管道寫端,保證寫入數(shù)據(jù)的完整性/sprintf(buf,"child process P1 is sending messages!n"); /在buf中填入準(zhǔn)備寫入管道的信息數(shù)據(jù)printf("child processP1!n"); /打印“子進(jìn)程P1正在運(yùn)行” /write(fd1,buf,50); /向管道寫端fd1寫入buf中的數(shù)據(jù),寫完后該數(shù)據(jù)即可以從讀端fd0讀出/sleep(5); /睡眠5秒/lockf(fd1,0,0); /解鎖管道寫端/exit(0); /子進(jìn)程P1退出/ else /主進(jìn)程的執(zhí)行邏輯/
12、 while(p2=fork()=-1); /創(chuàng)建第二個子進(jìn)程P2/if(p2=0) /子進(jìn)程P2的執(zhí)行邏輯/ lockf(fd1,1,0); /鎖定管道寫端,保證數(shù)據(jù)寫入完整/sprintf(buf,"child process P2 is sending messages!n"); /在buf中填入準(zhǔn)備寫入管道的信息數(shù)據(jù)printf("child processP2!n"); /打印“子進(jìn)程P2正在運(yùn)行” /write(fd1,buf,50); /向管道寫端fd1寫入buf中的數(shù)據(jù),寫完后該數(shù)據(jù)即可從讀端fd0讀出/sleep(5); /睡眠5秒/l
13、ockf(fd1,0,0); /解鎖管道寫端/exit(0); /子進(jìn)程P2退出/ /以下為主進(jìn)程執(zhí)行邏輯/wait(0); /等待某個子進(jìn)程退出/if(r=read(fd0,s,50)=-1) /從管道讀端fd0讀取P1或者P2寫入的數(shù)據(jù)(視哪個子進(jìn)程搶先執(zhí)行到lockf函數(shù))/ printf(:can't read pipen"); /讀取失敗,打印錯誤信息/ else printf(:%sn",s); /打印出讀到的信息數(shù)據(jù)/ wait(0); /等待第二個子進(jìn)程退出/if(r=read(fd0,s,50)=-1) /從管道讀端fd0讀取出P1或者P2寫入的數(shù)
14、據(jù)(視哪個子進(jìn)程后執(zhí)行到lockf函數(shù))/ printf(:can't read pipen"); /讀取失敗,打印錯誤信息/ else printf(:%sn",s); /打印讀取到的信息數(shù)據(jù)/ exit(0); /主進(jìn)程退出/ 2、命名管道設(shè)計(jì)。命名管道的通信例子中包括client端和server端。它們源代碼文件名稱分別為fifo_clt.c和fifo_svr.c,還有一個公共常量的有關(guān)文件被打包在文件fifo_hd.h運(yùn)行時,client只運(yùn)行一次就將退出,而server端作為服務(wù)器仍將繼續(xù)運(yùn)行,你再次啟動client來請求服務(wù)。FIFO的用法1、創(chuàng)建用mk
15、fifo或mknod創(chuàng)建一個命名管道。以mkfifo為例:#include<sys/types.h>#include<sys/stat.h>int mkfifo(const char *fifo_name, mode_t mode);/成功返回0,否則為-12、使用管道一經(jīng)創(chuàng)建,就可向普通文件一樣使用??赏ㄟ^系統(tǒng)調(diào)用open,close,read,write,unlink等進(jìn)行操作。管道打開過程中,變量O_NONBLOCK將影響打開后對文件的操作。默認(rèn)情況下該變量不設(shè)置,也就是以阻塞方式打開。這樣可以保證原子性操作。(因此可以不考慮該參數(shù)。)在操作過程中,如果對一個管道
16、進(jìn)行寫操作write,若對方?jīng)]有以讀方式打開將產(chǎn)生SIGPIPE。你可以捕獲此信號進(jìn)行處理。默認(rèn)情況下是出現(xiàn)寫錯誤。當(dāng)最后一個寫入者關(guān)閉了管道,將產(chǎn)生一個文件結(jié)束標(biāo)志EOF。3、client、server可以以client/server方式使用FIFO。如果一個服務(wù)器有多個客戶時,每個客戶可通過一個well_known FIFO服務(wù)器連接。連接后可以通過well_known FIFO向服務(wù)器發(fā)送請求,所發(fā)信息的長度必須PIPE_BUF (4096)。如果客戶服務(wù)器模式是并發(fā)型的話,則客戶機(jī)不能再通過well_known FIFO回讀信息。此時可采用在已連接的客戶與服務(wù)器之間建立一個私有通訊管道
17、的辦法來進(jìn)行通信。該私有管道被服務(wù)器創(chuàng)建后可以以I/O方式打開,用于客戶機(jī)和服務(wù)器之間進(jìn)行通訊,以完成指定性工作。頭文件#define my_fifo "my_fifo" /*定義頭文件名*/#define file_name "server." /*定義頭文件名*/客戶端程序#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include"fifo_hd.h"main(int argc,char *argv)intfd1,fd2,
18、pid,pid1; /* 定義管道*/charmy_buf100;charmy_fil100;charmy1buf100;if(fd1=open(my_fifo,1)=-1)fprintf(stderr,"Open well_known FIFO for readind Error!n");exit(-1); /*失敗*/ fprintf(stderr,"Open %s OK!n",my_fifo);pid=getpid();sprintf(my_buf,"%5.5d%6.6d%7.7d",pid,pid*10,pid*20);if(
19、write(fd1,my_buf,20)!=0)strcpy(my_fil,file_name); /*拷貝*/strncat(my_fil,my_buf,5);fprintf(stderr,"Send_fil: %sn",my_fil);sleep(2);if(fd2=open(my_fil,2)=-1)fprintf(stderr,"open %s Error!n",my_fil);close(fd1);exit(-2);fprintf(stderr,"open %s OK!n",my_fil);if(read(fd2,my1bu
20、f,5)!=0)my1buf5='0'fprintf(stderr,"Read from my_buf:%s!ntmy1buf:%s",my_buf,my1buf);if(strncmp(my_buf,my1buf,5)!=0)fprintf(stderr,"Different occurs!n");strcpy(my_buf,"0000000000");write(fd2,my_buf,5);/sleep(5);close(fd2);close(fd1);服務(wù)器程序#include<stdio.h>#in
21、clude<signal.h>#include<sys/types.h>#include<sys/stat.h>#include"fifo_hd.h"voidterminate();intwell_known_id,tmp_id;chartmp_fil100;main(int argc,char *argv)intfd1,fd2;pid_tpid;charmy_buf100,my_fil100,my_tmp100;sprintf(my_buf,"rm -f %s > /dev/null",my_fifo);sys
22、tem(my_buf);/do shell cmd rm -f my_fifo > /dev/nullwell_known_id=tmp_id=-1;signal(SIGINT,terminate);if(mkfifo(my_fifo,S_IRWXU|S_IRWXG|S_IRWXO)=-1)fprintf(stderr,"Create Well_known FIOF Error!n");exit(-1); /*創(chuàng)建失敗*/fprintf(stderr,"mkfifo OK!n");fprintf(stderr,"A New Seessio
23、n! I'm waiting connection.n");loop1: /*輸出字符串*/if(fd1=open(my_fifo,0)=-1)fprintf(stderr,"Open well_known FIFO for readind Error!n");unlink(my_fifo); /*斷鏈接*/exit(-2); well_known_id=fd1;tmp_id=-1;fprintf(stderr,"open my_fifo OK!n");if(read(fd1,my_buf,20)!=0)fprintf(stderr,&
24、quot;My_buff=%sn",my_buf);strcpy(my_fil,file_name);strncat(my_fil,my_buf,5);strcpy(tmp_fil,my_fil);if(pid=fork()!=0)close(fd1);wait();goto loop1;fprintf(stderr,"Tmp_FIFO is: %s|n",my_fil);if(mkfifo(my_fil,S_IRWXU|S_IRWXG|S_IRWXO)=-1)fprintf(stderr,"Create my_fil:%s FIFO Error!n&q
25、uot;,my_fil);exit(-1); /*錯誤*/ /system("ls server*");if(fd2=open(my_fil,2)=-1)fprintf(stderr,"Open %s Error!:%dn",my_fil,fd2);close(fd1); unlink(my_fifo);exit(-3);tmp_id=fd2;if(write(fd2,my_buf,5)!=5)fprintf(stderr,"Write %s Error!n",my_fil);close(fd2); close(fd1);unlink
26、(my_fil); unlink(my_fifo);exit(-4); /*退出*/sleep(1);if(read(fd2,my_tmp,5)!=5)fprintf(stderr,"read %s Error!n",my_fil);close(fd2); close(fd1);unlink(my_fil); unlink(my_fifo);exit(-5); /*退出*/else if(strncmp(my_tmp,"00000",5)!=0)close(fd2);close(fd1);fprintf(stderr,"Filed to fin
27、ish talking with %s!n",my_fil);unlink(my_fil);exit(-1); /*失敗*/goto loop1;elseclose(fd2);close(fd1);fprintf(stderr,"OK to talking with %s!n",my_fil);unlink(my_fil);/unlink(my_fifo);exit(0); /*成功實(shí)現(xiàn)管道通信*/void terminate()if(well_known_id!=-1)close(well_known_id); unlink(my_fifo);if(tmp_id
28、!=-1)close(tmp_id);unlink(tmp_fil);fprintf(stderr,"The Server Program stoped by Signal:SIGINT!n");exit(0);七、調(diào)試與測試任務(wù)一編譯方法: 編譯:cc liulong.c執(zhí)行:./a.out結(jié)果:任務(wù)二編譯方法是:編譯:cc o fifo_svr fifo_srv.ccc o fifo_clt fifo_client.c執(zhí)行:先啟動server端程序,方法為:./fifo_svr服務(wù)端:再換一個終端運(yùn)行client端,方法是:./fifo_clt客戶端:運(yùn)行時,clien
29、t只運(yùn)行一次就將退出,而server端作為服務(wù)器仍將繼續(xù)運(yùn)行,你再次啟動client來請求服務(wù)。<任務(wù)一運(yùn)行結(jié)果>正常:管道實(shí)現(xiàn)通信<任務(wù)二運(yùn)行結(jié)果>出現(xiàn)錯誤如下:服務(wù)器運(yùn)行起初正常,然后當(dāng)與客戶端建立通信時由于客戶端程序出錯,導(dǎo)致整個通信出現(xiàn)錯誤。 由客戶端引起的服務(wù)器程序運(yùn)行出現(xiàn)錯誤當(dāng)服務(wù)器輸送文件時,打開服務(wù)器出現(xiàn)錯誤繼續(xù)結(jié)果一樣:客戶端程序運(yùn)行出現(xiàn)錯誤服務(wù)器等待通信連接: 服務(wù)器程序正常運(yùn)行八、設(shè)計(jì)中遇到的問題及解決方法 在編寫無名管道前了解到pipe()創(chuàng)建的管道只能實(shí)現(xiàn)父子進(jìn)程或者兄弟進(jìn)程之間的通信,但是還是遇到了以下幾個問題:1、 怎樣實(shí)現(xiàn)不同子進(jìn)程互斥的
30、訪問管道?2、是各個子進(jìn)程都寫完之后父進(jìn)程一起讀,還是在每個子進(jìn)程一寫完父進(jìn)程就馬上讀,那么怎樣去通知父進(jìn)程去讀呢?經(jīng)過查閱相關(guān)資料得知,為解決第一個問題而引入了lockf()函數(shù)用于實(shí)現(xiàn)上鎖與解鎖,此函數(shù)放在讀寫之前執(zhí)行。為解決第二問題而引入sleep()和wait()函數(shù)用以實(shí)現(xiàn)睡眠與等待。 在編寫有名管道前經(jīng)查閱相關(guān)資料得知用mknod()或者mkfifo()函數(shù)調(diào)用創(chuàng)建有名管道從而實(shí)現(xiàn)在任意兩個文件間的通信,該管道可以像普通文件一樣read、write、open。由于這是個新接觸的知識,以往沒有練習(xí)過,所以出現(xiàn)的問題較多:首先,怎樣才能實(shí)現(xiàn)客戶/服務(wù)器模式,使其可在兩個終端上交互運(yùn)行?
31、 其次,怎樣控制讀寫以及輸入輸出?經(jīng)過查閱相關(guān)資料模仿、拷貝、小組討論即可得出基本模塊。最后使用signal(SIGINT,terminate)函數(shù)發(fā)送中斷信號退出程序。經(jīng)調(diào)試后最后可在機(jī)器上運(yùn)行。九、源程序清單<任務(wù)1>#include <unistd.h>#include <signal.h>#include <stdio.h>int pid1,pid2; main( ) int fd2;char outpipe100,inpipe100;pipe(fd); while (pid1=fork( )=-1);if(pid1=0) lockf(f
32、d1,1,0); sprintf(outpipe,"child 1 process is sending message!"); write(fd1,outpipe,50); sleep(5); lockf(fd1,0,0); exit(0); else while(pid2=fork( )=-1); if(pid2=0) lockf(fd1,1,0); sprintf(outpipe,"child 2 process is sending message!"); write(fd1,outpipe,50); sleep(5); lockf(fd1,0,
33、0); exit(0); else wait(0); read(fd0,inpipe,50); printf("%sn",inpipe); wait(0); read(fd0,inpipe,50); printf("%sn",inpipe); exit(0); <任務(wù)2>頭文件:#define my_fifo "my_fifo"#define file_name "server."客戶端程序:#include<stdio.h>#include<sys/types.h>#inclu
34、de<sys/stat.h>#include"fifo_hd.h"main(int argc,char *argv)intfd1,fd2,pid,pid1;charmy_buf100;charmy_fil100;charmy1buf100;if(fd1=open(my_fifo,1)=-1)fprintf(stderr,"Open well_known FIFO for readind Error!n");exit(-1); fprintf(stderr,"Open %s OK!n",my_fifo);pid=getpid
35、();sprintf(my_buf,"%5.5d%6.6d%7.7d",pid,pid*10,pid*20);if(write(fd1,my_buf,20)!=0)strcpy(my_fil,file_name);strncat(my_fil,my_buf,5);fprintf(stderr,"Send_fil: %sn",my_fil);sleep(2);if(fd2=open(my_fil,2)=-1)fprintf(stderr,"open %s Error!n",my_fil);close(fd1);exit(-2);fpri
36、ntf(stderr,"open %s OK!n",my_fil);if(read(fd2,my1buf,5)!=0)my1buf5='0'fprintf(stderr,"Read from my_buf:%s!ntmy1buf:%s",my_buf,my1buf);if(strncmp(my_buf,my1buf,5)!=0)fprintf(stderr,"Different occurs!n");strcpy(my_buf,"0000000000");write(fd2,my_buf,5);/s
37、leep(5);close(fd2);close(fd1);服務(wù)器程序:#include<stdio.h>#include<signal.h>#include<sys/types.h>#include<sys/stat.h>#include"fifo_hd.h"voidterminate();intwell_known_id,tmp_id;chartmp_fil100;main(int argc,char *argv)intfd1,fd2;pid_tpid;charmy_buf100,my_fil100,my_tmp100;s
38、printf(my_buf,"rm -f %s > /dev/null",my_fifo);system(my_buf);/do shell cmd rm -f my_fifo > /dev/nullwell_known_id=tmp_id=-1;signal(SIGINT,terminate);if(mkfifo(my_fifo,S_IRWXU|S_IRWXG|S_IRWXO)=-1)fprintf(stderr,"Create Well_known FIOF Error!n");exit(-1);fprintf(stderr,"
39、mkfifo OK!n");fprintf(stderr,"A New Seession! I'm waiting connection.n");loop1:if(fd1=open(my_fifo,0)=-1)fprintf(stderr,"Open well_known FIFO for readind Error!n");unlink(my_fifo);exit(-2); well_known_id=fd1;tmp_id=-1;fprintf(stderr,"open my_fifo OK!n");if(read
40、(fd1,my_buf,20)!=0)fprintf(stderr,"My_buff=%sn",my_buf);strcpy(my_fil,file_name);strncat(my_fil,my_buf,5);strcpy(tmp_fil,my_fil);if(pid=fork()!=0)close(fd1);wait();goto loop1;fprintf(stderr,"Tmp_FIFO is: %s|n",my_fil);if(mkfifo(my_fil,S_IRWXU|S_IRWXG|S_IRWXO)=-1)fprintf(stderr,&q
41、uot;Create my_fil:%s FIFO Error!n",my_fil);exit(-1); /system("ls server*");if(fd2=open(my_fil,2)=-1)fprintf(stderr,"Open %s Error!:%dn",my_fil,fd2);close(fd1); unlink(my_fifo);exit(-3);tmp_id=fd2;if(write(fd2,my_buf,5)!=5)fprintf(stderr,"Write %s Error!n",my_fil);close(fd2); close(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 撫順初中一模數(shù)學(xué)試卷
- 福州市初三沖刺數(shù)學(xué)試卷
- 阜寧二模數(shù)學(xué)試卷
- 肝炎護(hù)理課件
- 東城初中一模數(shù)學(xué)試卷
- 甘南藏族中考數(shù)學(xué)試卷
- 福建省廈門中考數(shù)學(xué)試卷
- 鎮(zhèn)街安全培訓(xùn)課件
- 2025年02月北京首都醫(yī)科大學(xué)附屬北京同仁醫(yī)院招聘5人筆試歷年專業(yè)考點(diǎn)(難、易錯點(diǎn))附帶答案詳解
- 2025至2030軌道式氧流量計(jì)行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 2025年河北公安廳交通管理總隊(duì)高速交警招聘考試筆試試題(含答案)
- 幼兒新年音樂活動方案
- 衛(wèi)生院艾滋病培訓(xùn)課件
- GB/T 33804-2025肥料級腐植酸鉀
- 2025至2030全球及中國公共廣播和語音報警系統(tǒng)(PAVA)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國電蚊拍行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國膩?zhàn)臃坌袠I(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資報告
- 女性職場禮儀
- 2025年湖北省中考語文真題(解析版)
- 2024-2025學(xué)年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招《語文》練習(xí)題(奪分金卷)附答案詳解
- 維修安全生產(chǎn)管理制度
評論
0/150
提交評論