管道通信操作系統(tǒng)實驗報告_第1頁
管道通信操作系統(tǒng)實驗報告_第2頁
管道通信操作系統(tǒng)實驗報告_第3頁
管道通信操作系統(tǒng)實驗報告_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、計算機與信息技術學院綜合性、設計性實驗報告專業(yè):計算機科學與技術年級 / 班級:08 級計科一班 2010 2011 學年第一學期課程名稱計算機操作系統(tǒng)指導教師本組成員學號姓名實驗地點計算機學院過街天橋機房 C實驗時間2010.11.7區(qū)201011.14項目名稱管道通信實驗類型綜合性一、實驗目的1、了解什么是管道2、熟悉 UNIX/LINUX支持的管道通信方式二、實驗儀器或設備已安裝 linux系統(tǒng)的計算機一臺三、總體設計(設計原理、設計方案及流程等)設計原理:1、無名管道:一個臨時文件。利用pipe( ) 建立起來的無名文件(無路徑名)。只用該系統(tǒng)調(diào)用所返回的文件描述符來標識該文件,故只有

2、調(diào)用 pipe( ) 的進程及其子孫進程才能識別此文件描述符,才能利用該文件(管道)進行通信。當這些進程不再使用此管道時,核心收回其索引結點。它能夠連接一個寫進程和一個讀進程、并允許它們以生產(chǎn)者消費者方式進行通信的一個共享文件,又稱為pipe 文件。由寫進程從管道的寫入端(句柄1)將數(shù)據(jù)寫入管道,而讀進程則從管道的讀出端(句柄0)讀出數(shù)據(jù)。2、建立一無名管道: pipe()系統(tǒng)調(diào)用格式: pipe(pipeID)參數(shù)定義:int pipe(pipeID);int pipeID 2;其中,文件描述符pipeID 1是寫入端,文件描述符pipeID 0是讀出端。該函數(shù)使用頭文件如下:#includ

3、e #inlcude #include 2、從管道讀數(shù)據(jù):read( )系統(tǒng)調(diào)用格式:read(fd,buf,nbyte)功能:從 fd 所指示的文件中讀出 nbyte 個字節(jié)的數(shù)據(jù),并將它們送至由指針 buf 所指示的緩沖區(qū)中。如該文件被加鎖,等待,直到鎖打開為止。參數(shù)定義:int read(fd,buf,nbyte);int fd;char *buf;unsigned nbyte;3、從管道寫入數(shù)據(jù): write( )系統(tǒng)調(diào)用格式: write(fd,buf,nbyte)功能:把 nbyte個字節(jié)的數(shù)據(jù),從 buf中。如文件加鎖,暫停寫入,直至開鎖。參數(shù)定義同 read( )。4、文件鎖定

4、: lockf()所指向的緩沖區(qū)寫到由fd所指向的文件參數(shù)定義:int lockf(files,function,size)int files,function;long size;其中, files是文件描述符; function是鎖定和解鎖, 1 表示鎖定, 0 表示解鎖;size 是鎖定或解鎖的字節(jié)數(shù),若用0,表示從文件的當前位置到文件尾。設計方案:1、使用 fork()2、使用 pipe()創(chuàng)建兩個子進程pid1 和 pid2創(chuàng)建一個無名管道fd , fd0為讀出端,fd1為寫入端3、定義兩個緩沖區(qū)4、使用 read() 和OutPipe100 和 InPipe100write()進行

5、管道的讀和寫,利用lockf()實現(xiàn)對管道的只讀或只寫5、使用 sleep() 來調(diào)整鎖定的時間流程:四、實驗步驟(包括主要步驟、代碼分析等)#include int pid1, pid2; / int main( ) 定義兩個進程變量int fd2;/fd1char OutPipe100,InPipe100;pipe(fd);/while(pid1 = fork() = -1);/為寫入端, fd0為讀出端創(chuàng)建管道創(chuàng)建進程 pid1 ,如果不成功,則空循環(huán)if(pid1 = 0)printf(nChild1n);lockf(fd1, 1, 0);/將寫入端鎖定sprintf(OutPipe,

6、 n Child process 1 is sending message!n);/ 給 OutPipe賦值write(fd1, OutPipe, 50);/將 50 字節(jié)的數(shù)據(jù)從OutPipe所指向的緩沖區(qū)寫入管道端口fd1sleep(5);/等待讀進程讀出數(shù)據(jù)lockf(fd1, 0, 0);exit(0);/結束進程/pid1將寫入端解鎖elsewhile(pid2 = fork() = -1);if(pid2 = 0)/創(chuàng)建子進程pid2printf(nChild2n);lockf(fd1, 1, 0);sprintf(OutPipe, n Child process 2 is sen

7、ding message!n); write(fd1, OutPipe, 50);sleep(5);lockf(fd1, 0, 0);exit(0);elseprintf(nFather1n);wait(0);/等待子進程1 結束read(fd0, InPipe, 50);/從fd0端口讀出50 字節(jié)的數(shù)據(jù)送到 inpipe指向的緩沖區(qū)printf(%sn, InPipe); /顯示讀出的數(shù)據(jù)printf(nFather2n);wait(0);/等待子進程 2 結束read(fd0, InPipe, 50);printf(%sn, InPipe);exit(0);/父進程結束return 0;

8、五、結果分析與總結運行結果:Child process 1 is sending message!Child process 2 is sending message!實驗總結:通過本次實驗, 使我對管道有了一個更深層的了解,加深了我對管道的概念。進一步熟悉并掌握了建立一無名管道:pipe() ,從管道讀數(shù)據(jù): read( ) ,從管道寫入數(shù)據(jù): write( ),文件鎖定: lockf()的系統(tǒng)調(diào)用格式。為了協(xié)調(diào)雙方的通信,了解了管道通信機制必須提供以下 3 方面的協(xié)調(diào)能力: 1、互斥。當一個進程正在對 pipe 進程讀 / 寫操作時,另一進程必須等待,程序中使用lock(fd1,1,0) 函數(shù)實現(xiàn)對管道的加鎖操作, 用 lock(fd1,0,0) 解除管道的鎖定。 2、同步。當寫進程把一定數(shù)量的數(shù)據(jù)寫入 pipe 后,便去睡眠等待,直到

溫馨提示

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

評論

0/150

提交評論