




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機操作系統(tǒng)課程設(shè)計報告課程名稱: 操作系統(tǒng) 設(shè)計題目: 管道通信 指導(dǎo)教師: * 班 級: * 學(xué) 號: * 學(xué)生姓名: * 同組人員: * 計算機科學(xué)與工程學(xué)院2014 年 6 月 19 日成 績: 評 語: 前言:Linux 操作系統(tǒng)是一個向用戶開放源碼的免費的類 UNIX 操作系統(tǒng)。它為在校學(xué)生學(xué)習(xí)操作系統(tǒng)課程提供了一個看得見摸得著的范例。對于學(xué)生正確理解,掌握操作系統(tǒng)的基本知識具有重要意義。鑒于此,本操作系統(tǒng)課程涉及的實驗均在 Linux 環(huán)境下進行。這就要求大家:(1)熟悉 Linux 的操作和開發(fā)環(huán)境;(2)具有 C 語言知識(Linux 操作系統(tǒng)大約 90%的源碼是用 C 語
2、言編寫)。我們的設(shè)計和實驗將在 Windows xp 環(huán)境下,基于虛擬機軟件 VMWare 軟件進行安裝。學(xué)習(xí)計算機軟件技術(shù),特別是計算機操作系統(tǒng)技術(shù),除了需要刻苦努力外,還需要掌握軟件和操作系統(tǒng)的原理與設(shè)計技巧。如何學(xué)習(xí)和掌握操作系統(tǒng)技術(shù)的原理與實際技巧呢?除了聽課和讀書之外,最好的方法恐怕就是在實踐中練習(xí)。例如,自己設(shè)計一個小型操作系統(tǒng),多使用操作系統(tǒng),多閱讀和分析操作源代碼等。但由于我們的條件和學(xué)時有限,在理論學(xué)習(xí)過程中沒有給同學(xué)們提供更多的實驗機會。管道通信,通過在兩個進程間創(chuàng)建通道,一個寫信息通過通道傳送給另一個進程并且讀出來,同過實踐讓我們了解了什么是管道通信機制,實現(xiàn)了程序進程間
3、的通信。積極通過合作,完成任務(wù)。目 錄第一章第一章 :系統(tǒng)環(huán)境:系統(tǒng)環(huán)境.41.1 硬件環(huán)境.41.2 軟件環(huán)境.4第二章第二章 :設(shè)計目的:設(shè)計目的.4第三章第三章 :總體設(shè)計:總體設(shè)計.53.1 程序設(shè)計組成框圖.53.2 流程圖.63.2.1 匿名管道通信 C/S 流程圖.63.2.2 命名管道通信 C/S 流程圖.6第四章第四章 :詳細設(shè)計:詳細設(shè)計.84.1 匿名管道通信.84.2 命名管道通信.10第五章第五章 :調(diào)試與測試:調(diào)試與測試.13第六章第六章 :設(shè)計中遇到的問題及解決方法:設(shè)計中遇到的問題及解決方法.15第七章第七章 :源程序清單和執(zhí)行結(jié)果及分析:源程序清單和執(zhí)行結(jié)果及
4、分析.16第八章第八章 : :總結(jié)總結(jié).20第九章第九章 : :參考文獻參考文獻.20第 1 章:系統(tǒng)環(huán)境1.1 硬件環(huán)境硬件環(huán)境Intel(R)Core2 Duo CPU E7500 2.93GHz 2.00GB 內(nèi)存1.2 軟件環(huán)境軟件環(huán)境1)Microsoft Windows XP Professional 版本 2002 Service Pack 32)Vmware Workstation 10.0.1 build-13797763)Red Hat Linux 9第 2 章:設(shè)計目的實踐操作系統(tǒng)原理知識,根據(jù)題目要求設(shè)計、實現(xiàn)進程的管道通信,并且在虛擬機中模擬的 linux 系統(tǒng)中運行
5、檢測。第 3 章:總體設(shè)計3.1 程序設(shè)計組成框圖程序設(shè)計組成框圖 無名管道讀寫示意圖 命名管道操作示意圖3.2 流程圖流程圖3.2.1 匿名管道通信匿名管道通信 C/S 流程圖流程圖 3.2.2 命名管道通信命名管道通信 C/S 流程圖流程圖 FIFO 寫進程: 第 4 章:詳細設(shè)計4.1 匿名管道通信匿名管道通信管道用于不同進程間通信。通常先創(chuàng)建一個管道,再通過 fork 函數(shù)創(chuàng)建一個子進程,該子進程會繼承父進程創(chuàng)建的管道。注意事項:必須在系統(tǒng)調(diào)用 fork()前調(diào)用 pipe() ,否則子進程將不會繼承文件描述符。否則,會創(chuàng)建兩個管道,因為父子進程共享同一段代碼段,都會各自調(diào)用 pipe
6、() ,即建立兩個管道,出現(xiàn)異常錯誤。 父進程通過管道向服務(wù)器發(fā)布命令,然后由服務(wù)器執(zhí)行命令。1.fork()創(chuàng)建一個新進程。用法:int fork()其中返回 int 取值意義如下:0:創(chuàng)建子進程,從子進程返回的 id 值0:從父進程返回的子進程 id 值-1:創(chuàng)建失敗2.lockf(files,function,size)用作鎖定文件的某些段或者整個文件。頭文件:#include參數(shù)定義:int lockf(files,function,size);int files,function;long size;其中:files 是文件描述符;function 是鎖定和解鎖;1 表示鎖定;0 表
7、示解鎖;Size 是鎖定或解鎖的字節(jié)數(shù),若用 0,表示從文件的當(dāng)前位置到文件尾。3.read功能:從描述符為filedes 的文件讀信息。用法:#include ssize_t read(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 ssize_t write(int filedes, const void
8、* buff, size_t nbytes) ;返回值:若成功為已寫入的字節(jié)數(shù);出錯為-1。int write(int fd, char *buff, unsigned nbytes) ;文件位置指針文件位置指針:每個打開文件都有一個與其相關(guān)聯(lián)的“當(dāng)前位移量” 。是從文件開始處計算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件位置處開始,并使位移量增加所讀或?qū)懙淖止?jié)數(shù)。按系統(tǒng)默認,當(dāng)打開一個文件時,除非指定 O_APPEND 選擇項,否則該位移量被設(shè)置為0,即指向文件的開始處。文件位置指針可以通過系統(tǒng)調(diào)用 lseek 來移動。#include #include #include #include #i
9、nclude #include /* * 程序入口 * */ int main() int pipe_fd2; pid_t pid; char buf_r100; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r); /對較大的結(jié)構(gòu)體或數(shù)組進行清零操作的一種最快方法 /*創(chuàng)建管道*/ if(pipe(pipe_fd)0) printf(%d numbers read from the pipe is %sn,r_num,buf_r); close(pipe_fd0); exit(0); else if(pid0) /父進程執(zhí)行序列 clo
10、se(pipe_fd0); /父進程先關(guān)閉了管道的讀端 if(write(pipe_fd1,Hello,5)!=-1) printf(parent write1 Hello!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent write2 Pipe!n); close(pipe_fd1); waitpid(pid,NULL,0); /*等待子進程結(jié)束*/ exit(0); return 0; 4.2 命名管道通信命名管道通信命名管道 :命名管道和無名管道基本相同,但也有不同點:無名管道只能有父進程使用;但是通過命名管道,不相關(guān)的進程也能交換數(shù)據(jù)。
11、客戶機實現(xiàn)數(shù)據(jù)的發(fā)送,服務(wù)器實現(xiàn)數(shù)據(jù)接收。1.創(chuàng)建用 mkfifo 或 mknod 創(chuàng)建一個命名管道。以 mkfifo 為例:#include #include int mkfifo(const char *fifo_name, mode_t mode);/成功返回 0,否則為-12、使用管道一經(jīng)創(chuàng)建,就可向普通文件一樣使用。可通過系統(tǒng)調(diào)用open,close,read,write,unlink 等進行操作。FIFO 讀進程: #include #include #include #include #include #include #include #define FIFO myfifo /
12、*程序入口*/int main(int argc,char* argv) char buf_r100; int fd; int nread; printf(Preparing for reading bytes.n); memset(buf_r,0,sizeof(buf_r); /*打開管道*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); while(1) memset(buf_r,0,sizeof(buf_r); if(nread=read(fd,buf_r,100)=-1) if(errno=E
13、AGAIN) printf(no data yetn); printf(read %s from FIFOn,buf_r); sleep(1); /*后面三句話是不會被運行到的,但不會影響程序運行的效果當(dāng)程序在上面的死循環(huán)中執(zhí)行時收到信號后會馬上結(jié)束運行而沒有執(zhí)行后面的三句話。*/ close(fd); /關(guān)閉管道 pause(); /暫停,等待信號 unlink(FIFO); /刪除文件 FIFO 寫進程:#include #include #include #include #include #include #include #define FIFO_SERVER myfifo /* *
14、 程序入口 * */ int main(int argc,char* argv) int fd; char w_buf100; int nwrite; /*創(chuàng)建有名管道*/ if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)0)&(errno!=EEXIST) printf(cannot create fifoservern); /*打開管道*/ fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); /*入?yún)z測*/ if(argc=1) prin
15、tf(Please send somethingn); exit(-1); strcpy(w_buf,argv1); /* 向管道寫入數(shù)據(jù) */ if(nwrite=write(fd,w_buf,100)=-1) if(errno=EAGAIN) printf(The FIFO has not been read yet.Please try latern); else printf(write %s to the FIFOn,w_buf); close(fd); /關(guān)閉管道 return 0; 第 5 章:調(diào)試與測試運行匿名管道通信以及運行命名管道通信讀進程結(jié)果如下: 打開另外一個終端,運行
16、寫進程結(jié)果如下:同時讀進程結(jié)果發(fā)生變化如下:第 6 章:設(shè)計中遇到的問題及解決方法 1、 由于課程涉及 UNIX 管道通信模式較少,剛開始做課程設(shè)計時感覺無從下手,后來通過看書以及上網(wǎng)查詢相關(guān)資料有些頭緒。2、對于虛擬機與主機的交互搞了好久但是最后結(jié)果不理想,也沒搞成功,試了用 ftp方式相互連接,以及通過 VMware Tools 也沒有成功。后來,通過問學(xué)長和同學(xué)終于解決了。通過此事,我知道知識自己主動探索實踐固然好,但學(xué)習(xí)他人已有的經(jīng)驗學(xué)的知識更多更快。3、對于 C 語言中 open、write 等函數(shù)掌握的并不好,這是由于長期不聯(lián)系 C 語言所致,一門語言要想精通必須通過不斷的聯(lián)系才行
17、。第 7 章:源程序清單和執(zhí)行結(jié)果及分析任務(wù) 1:匿名管道通信#include #include #include #include #include #include /* * 程序入口 * */ int main() int pipe_fd2; pid_t pid; char buf_r100; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r); /*創(chuàng)建管道*/ if(pipe(pipe_fd)0) printf(%d numbers read from the pipe is %sn,r_num,buf_r); close(pi
18、pe_fd0); exit(0); else if(pid0) /父進程執(zhí)行序列 close(pipe_fd0); /父進程先關(guān)閉了管道的讀端 if(write(pipe_fd1,Hello,5)!=-1) printf(parent write1 Hello!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent write2 Pipe!n); close(pipe_fd1); waitpid(pid,NULL,0); /*等待子進程結(jié)束*/ exit(0); return 0; 任務(wù) 2:命名管道通信FIFO 讀進程: #include #inc
19、lude #include #include #include #include #include #define FIFO /tmp/myfifo /*程序入口*/int main(int argc,char* argv) char buf_r100; int fd; int nread; printf(Preparing for reading bytes.n); memset(buf_r,0,sizeof(buf_r); /*打開管道*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); while
20、(1) memset(buf_r,0,sizeof(buf_r); if(nread=read(fd,buf_r,100)=-1) if(errno=EAGAIN) printf(no data yetn); printf(read %s from FIFOn,buf_r); sleep(1); /*后面三句話是不會被運行到的,但不會影響程序運行的效果當(dāng)程序在上面的死循環(huán)中執(zhí)行時收到信號后會馬上結(jié)束運行而沒有執(zhí)行后面的三句話。*/ close(fd); /關(guān)閉管道 pause(); /暫停,等待信號 unlink(FIFO); /刪除文件 FIFO 寫進程:#include #include
21、#include #include #include #include #include #define FIFO_SERVER /tmp/myfifo /* * 程序入口 * */ int main(int argc,char* argv) int fd; char w_buf100; int nwrite; /*創(chuàng)建有名管道*/ if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)0)&(errno!=EEXIST) printf(cannot create fifoservern); /*打開管道*/ fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); if(fd=-1) perror(open); ex
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋁合金材料施工方案
- (三模)榆林市2025屆高三第三次模擬檢測生物試卷(含答案詳解)
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊一 任務(wù)4 數(shù)控加工機床夾具基礎(chǔ)
- 結(jié)合農(nóng)業(yè)植保技術(shù)的現(xiàn)代農(nóng)業(yè)病蟲害防治思路與具體辦法探討
- 醫(yī)療機構(gòu)水污染物排放的管理制度與組織架構(gòu)
- 石油化工靜電接地系統(tǒng)的組成與功能
- 綠色發(fā)展與可持續(xù)城鎮(zhèn)化策略
- 積極穩(wěn)妥推進碳達峰碳中和的策略及實施路徑
- 采購鐵皮保溫施工方案
- 2018年數(shù)學(xué)(北師大版選修2-2)練習(xí)第3章22最大值最小值問題活頁作業(yè)14
- 水產(chǎn)生物遺傳育種學(xué)課件
- 婦產(chǎn)科醫(yī)患溝通護理課件
- 第3課《萬物共存》課件
- 精致的八寶飯
- GB/T 43602-2023物理氣相沉積多層硬質(zhì)涂層的成分、結(jié)構(gòu)及性能評價
- 醫(yī)院預(yù)算執(zhí)行情況分析報告
- 生活老師培訓(xùn)資料課件
- 年終存貨盤點管理制度
- 智能化弱電工程維保方案全套
- 三對三籃球賽記錄表
- 教科版科學(xué)五年級下冊第一單元《生物與環(huán)境》測試卷含完整答案(奪冠系列)
評論
0/150
提交評論