資源描述:
《管道通信機(jī)制和消息緩沖機(jī)制》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、實(shí)驗(yàn)題目管道通信機(jī)制和消息緩沖機(jī)制小組合作否姓名班級(jí)學(xué)號(hào)一、實(shí)驗(yàn)?zāi)康?、理解和掌握管道通信機(jī)制中使用的系統(tǒng)調(diào)用命令的格式和如何利用系統(tǒng)調(diào)用命令進(jìn)行進(jìn)程通信編程。2、理解和掌握消息緩沖機(jī)制中使用的系統(tǒng)調(diào)用命令的格式和如何利用系統(tǒng)調(diào)用命令進(jìn)行進(jìn)程通信編程。二.實(shí)驗(yàn)環(huán)境1、VMwareWorkstation工作平臺(tái)2、Linux系統(tǒng)三、實(shí)驗(yàn)內(nèi)容與步驟一、管道通信機(jī)制1、無(wú)名管道的通信(1)創(chuàng)建無(wú)名管道的格式#include#include#includeintpipe(intfiledes[2]);正確返回:0;錯(cuò)誤返回:-1。(2)無(wú)
2、名管道pipe()的使用16.1、使用無(wú)名管道pipe()進(jìn)行父子進(jìn)程之間的通信源程序代碼如下:#include#include#includeintpipe(intfiledes[2]);charparent[]="Amessagetopipe'communication.";main(){intpid,chan1[2];charbuf[100];pipe(chan1);pid=fork();if(pid<0){printf("tocreatechilderror");exit(1);}if(pid>0){close(c
3、han1[0]);printf("parentprocesssendsamessagetochild.");write(chan1[1],parent,sizeof(parent));close(chan1[1]);printf("parentprocesswaitsthechildtoterminate.");wait(0);printf("parentprocessterminate.");}else{close(chan1[1]);read(chan1[0],buf,100);printf("Themessagereadbychildprocessfromparentis:%
4、s.",buf);close(0);printf("childprocessterminate");}}實(shí)驗(yàn)運(yùn)行結(jié)果如圖所示:2、以命令行為參數(shù)的管道通信(1)命令格式#include#include#includeFiLepopen(constcharcmdstring,constchartype);(2)打開(kāi)一個(gè)以命令行為參數(shù)的管道文件,完成進(jìn)程之間的通信16.2、以命令行為參數(shù)的管道文件的示例假設(shè)有一個(gè)可執(zhí)行程序chcase,從標(biāo)準(zhǔn)輸入設(shè)備讀字符,將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母并進(jìn)行輸出。主程序使用popen創(chuàng)建管道,實(shí)現(xiàn)將
5、某文本文件中的字母轉(zhuǎn)換成大寫(xiě)字母,期中的文本文件名作為參數(shù)傳進(jìn)來(lái)。源程序代碼如下:#include#include#defineMAXLINE100intmain(intargc,char*argv[]){charline[MAXLINE];FILE*fpin,*fpout;if(argc!=2){fprintf(stderr,"usage:a.out");exit(1);}if((fpin=fopen(argv[1],"r"))==NULL){fprintf(stderr,"can'topen%s",argv[1]);ex
6、it(1);}if((fpout=popen("/root/LiFang/chcase.exe","w"))==NULL){fprintf(stderr,"popenerror");exit(1);}while((fgets(line,MAXLINE,fpin))!=NULL){if(fputs(line,fpout)==EOF){fprintf(stderr,"fputserrortopipe.");exit(1);}}if(ferror(fpin)){fprintf(stderr,"fgetserror.");exit(1);}if(pclose(fpout)==-1){fpr
7、intf(stderr,"pcloseerror.");exit(1);}exit(0);}實(shí)驗(yàn)運(yùn)行結(jié)果如下圖所示:1、有名管道的通信(1)創(chuàng)建一個(gè)有名管道的系統(tǒng)調(diào)用mknod()#include#include#include#includeintmknod(constchar*pathname,mode