




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告年級(jí)、專業(yè)、班級(jí)2013級(jí)計(jì)科6班姓名張行實(shí)驗(yàn)題目進(jìn)程間通信實(shí)驗(yàn)時(shí)間2015-10-31實(shí)驗(yàn)地點(diǎn)0410實(shí)驗(yàn)成績(jī) 實(shí)驗(yàn)性質(zhì)驗(yàn)證性 設(shè)計(jì)性 綜合性教師評(píng)價(jià):算法/實(shí)驗(yàn)過(guò)程正確; 源程序/實(shí)驗(yàn)內(nèi)容提交 程序結(jié)構(gòu)/實(shí)驗(yàn)步驟合理;實(shí)驗(yàn)結(jié)果正確; 語(yǔ)法、語(yǔ)義正確; 報(bào)告規(guī)范; 其他: 評(píng)價(jià)教師簽名:一、實(shí)驗(yàn)?zāi)康?Ø 了解管道通信的特點(diǎn),掌握管道通信的使用方法。Ø 了解消息隊(duì)列通信機(jī)制及原理,掌握消息隊(duì)列相關(guān)系統(tǒng)調(diào)用的使用方法及功能。二、實(shí)驗(yàn)項(xiàng)目?jī)?nèi)容管道通信-實(shí)驗(yàn)內(nèi)容:¢ 1.父進(jìn)程創(chuàng)建管道和兩個(gè)子進(jìn)程p1和p2¢ 2.子進(jìn)程p1打開給定文件(如果沒
2、有,則創(chuàng)建文件),并向文件中寫數(shù)據(jù),寫完關(guān)閉文件,然后向管道寫入一條消息“ok",目的是通知進(jìn)程p2可以讀取文件內(nèi)容了。¢ 3.子進(jìn)程p2通過(guò)管道讀取消息,如果消息是“ok”,則打開文件,讀取文件內(nèi)容,并將其輸出到屏幕上,關(guān)閉文件.¢消息隊(duì)列-實(shí)驗(yàn)內(nèi)容Ø 父進(jìn)程創(chuàng)建消息隊(duì)列和兩個(gè)子進(jìn)程p1和p2Ø 子進(jìn)程p1打開給定文件(如果沒有,則創(chuàng)建文件),并向文件中寫數(shù)據(jù),寫完關(guān)閉文件,然后向消息隊(duì)列寫入一條消息“ok”,目的是通知進(jìn)程p2可以讀取文件內(nèi)容了。Ø 子進(jìn)程p2從消息隊(duì)列讀取消息,如果收到消息“ok”,則打開文件,讀取文件內(nèi)容,并將
3、其輸出道屏幕上,關(guān)閉文件。三、實(shí)驗(yàn)過(guò)程與算法int pipe(int fd2)功能:創(chuàng)建管道int read(int fd, void *buf, int count);功能:從參數(shù)fd指定的讀端讀取管道數(shù)據(jù)到大小為count的緩存buf中,返回實(shí)際讀取到的字節(jié)數(shù)。int write(int fd, void *buf, int count);功能:向參數(shù)fd指定的寫端從緩存buf中取出count個(gè)字節(jié)到管道中,返回值為實(shí)際寫入的字節(jié)數(shù)int msgsnd(int msqid, const void * ptr, size_t nbytes, int flag) 功能:往消息隊(duì)列寫消息,即發(fā)送
4、消息。int msgrcv(int msqid, const void * ptr, size_t nbytes ,long type, int flag) ;功能:從消息隊(duì)列讀消息,即接收消息。管道代碼如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>int main(void) int fd2,byte; pid_t childpid1; pid_t childpid2; FILE *fp;
5、char s20; char string = "ok" char readbuffer80; pipe(fd); int r_fd = fd0; int w_fd = fd1; if(childpid1 = fork()= -1) perror("fork error!"); exit(1); else if(childpid1 = 0) printf("childpid1 pid is:%dn",getpid(); if(fp=fopen("hello.txt","w")=NULL) pri
6、ntf("The file %s not be open.n","hello.txt"); return 0; fputs("Hello!",fp); printf("successn"); fclose(fp); close(r_fd);/close write write(w_fd,string,strlen(string); exit(0); else wait(NULL); if(childpid2 = fork()= -1) perror("fork error!"); exit(1)
7、; else if(childpid2 = 0) printf("childpid2 pid is:%dn",getpid(); close(w_fd);/close read byte = read(r_fd,readbuffer,sizeof(readbuffer); if(strcmp("ok",readbuffer)=0) if(fp=fopen("hello.txt","r")=NULL) printf("The file %s notopen.n","hello.txt&q
8、uot;); return; while(fgets(s,20,fp)!=NULL) printf("%sn",s); fclose(fp); else wait(NULL); return 0;消息隊(duì)列代碼如下:#include<stdio.h>#include<sys/msg.h>#include<fcntl.h>#include<stdlib.h>#include<string.h>#define MAX 100struct msgbuff long mtype; char dataMAX;int main(
9、) FILE *fp; pid_t pid1,pid2; key_t key; char s20; char string = "ok" if(key=ftok("/home/zh",'g')<0) printf("key get error!n"); return -1; int mgsid; if(mgsid=msgget(key,IPC_CREAT|0666)= -1) printf("creat errorn"); return -1; pid1=fork(); if(pid1<
10、0) printf("fork creat error!n"); exit(1); else if(pid1=0) printf("pid1 pid is:%dn",getpid(); printf("Sending the message.n"); sleep(1); struct msgbuff msg1; msg1.mtype=getppid(); if(fp=fopen("hello.txt","w")=NULL) printf("The file %s not openn&q
11、uot;,"hello.txt"); return; fputs("Hello!",fp); fclose(fp); strcpy(msg1.data,"ok"); if(msgsnd(mgsid,&msg1,sizeof(msg1.data),0)<0) printf("Sending error!n"); exit(1); else printf("complete sending !n"); exit(0); else wait(NULL); pid2=fork(); if(
12、pid2<0) printf("fork creat error!n"); exit(1); else if(pid2=0) printf("pid2 pid is:%dn",getpid(); printf("Receiving the message.n"); sleep(1); struct msgbuff msg2; /msg2.mtype=getppid(); if(msgrcv(mgsid,&msg2,MAX,getppid(),0)<0) printf("receiving error!n&
13、quot;); exit(1); else printf(" complete receiving!n"); if(strcmp("ok",msg2.data)=0) if(fp=fopen("hello.txt","r")=NULL) printf("The file %s no opened.n","hello.txt"); return; while(fgets(s,20,fp)!=NULL) printf("the message is:%sn",s); fclose(fp); else wait(NULL); exit(0); return 0; 四、實(shí)驗(yàn)結(jié)果及分析和(或)源程序調(diào)試過(guò)程(包含程序使用方法、程序運(yùn)行截圖),實(shí)驗(yàn)過(guò)程中遇到的問(wèn)題分析與心得體會(huì)。(實(shí)驗(yàn)報(bào)告中最重要的部分,應(yīng)盡量詳細(xì),重點(diǎn)描述自己遇到的問(wèn)題以及解決方法)管道通信運(yùn)行結(jié)果如下:消息隊(duì)列運(yùn)行結(jié)果如下兩個(gè)通信都有一個(gè)消息傳輸?shù)倪^(guò)程在里面,
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 景觀宣傳欄施工合同
- 2025勞動(dòng)合同樣本標(biāo)準(zhǔn)格式
- 2025年規(guī)范版工資集體合同模板
- 簡(jiǎn)單日語(yǔ)試題及答案
- 土建總監(jiān)考試題庫(kù)及答案
- 2025人壽保險(xiǎn)合同印花稅
- 土壤修復(fù)項(xiàng)目資料歸檔與信息化管理試題及答案
- 膀胱癌根治術(shù)后護(hù)理
- 膽道術(shù)后護(hù)理
- 2025年3月消防應(yīng)急疏散演練簡(jiǎn)報(bào)標(biāo)題
- 會(huì)計(jì)學(xué)專業(yè)建設(shè)規(guī)劃
- 部編版語(yǔ)文四年級(jí)下冊(cè)作文審題訓(xùn)練題目
- 達(dá)格列凈的療效與安全PPT課件
- 中國(guó)嘉德北京保利等藝術(shù)品拍賣公司庫(kù)房管理制度
- 《儒林外史》試題含答案-儒林外史題目及答案
- 2022年藥品檢驗(yàn)員綜合理論技能考試題庫(kù)(精選500題)
- 地溝更換管線專項(xiàng)施工方案完整
- Spelling-Bee活動(dòng)方案(中)
- 鋼鐵熱連軋機(jī)1780mm說(shuō)明書(新)
- MEI004內(nèi)層排板、疊板、拆板工作指示2013內(nèi)容
- 解讀建筑基樁檢測(cè)技術(shù)規(guī)范PPT課件
評(píng)論
0/150
提交評(píng)論