09實驗7管道通信實驗_第1頁
09實驗7管道通信實驗_第2頁
09實驗7管道通信實驗_第3頁
09實驗7管道通信實驗_第4頁
09實驗7管道通信實驗_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、寧德師范學(xué)院計算機(jī)系實驗報告(2015 2016 學(xué)年 第 二 學(xué)期)課程名稱 嵌入式操作系統(tǒng)(Linux) 實驗名稱 實驗7 管道通信實驗 專 業(yè) 計算機(jī)科學(xué)與技術(shù)(專升本) 年 級 15級 組 號 09 成員1學(xué)號 B2015102320 成員1姓名 陳朋朋 成員2學(xué)號 B2015102323 成員2姓名 林振賢 指導(dǎo)教師 黃進(jìn)華 實驗日期 2016-5-30 實驗?zāi)康呐c要求:通過編寫有名管道多路通信實驗,大家可進(jìn)一步熟練掌握管道的創(chuàng)建、讀寫等操作,同時,也復(fù)習(xí)使用select函數(shù)實現(xiàn)管道的通信。實驗設(shè)備(環(huán)境): 每組一臺安裝VMware Workstation的計算機(jī)。實驗內(nèi)容:在該實

2、驗中,要求創(chuàng)建兩個管道,首先讀出管道一中的數(shù)據(jù),再把從管道一中讀入的數(shù)據(jù)寫入到管道二中去。這里的select 函數(shù)采用阻塞形式,也就是首先在程序中實現(xiàn)將數(shù)據(jù)寫入管道一,并通過select 函數(shù)實現(xiàn)將管道一的數(shù)據(jù)讀出,并寫入管道二,接著該程序一直等待用戶輸入管道一的數(shù)據(jù)并將其即時讀出。實驗步驟:/*select.c*/#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <time.

3、h>#include <errno.h>#define FIFO1"in1"#define FIFO2"in2"#define MAX_BUFFER_SIZE1024/* 緩沖區(qū)大小*/#define IN_FILES3/* 多路復(fù)用輸入文件數(shù)目*/#define TIME_DELAY60/* 超時值秒數(shù) */#define MAX(a, b)(a > b)?(a):(b)int main(void)int fdsIN_FILES;char bufMAX_BUFFER_SIZE;int i, res, real_read, max

4、fd;struct timeval tv;fd_set inset,tmp_inset;fds0 = 0;/* 創(chuàng)建兩個有名管道 */if (access(FIFO1, F_OK) = -1) if (mkfifo(FIFO1, 0666) < 0) && (errno != EEXIST)printf("Cannot create fifo filen");exit(1);if (access(FIFO2, F_OK) = -1) if (mkfifo(FIFO2, 0666) < 0) && (errno != EEXIST)

5、printf("Cannot create fifo filen");exit(1);/* 以只讀非阻塞方式打開兩個管道文件 */if(fds1 = open (FIFO1, O_RDONLY|O_NONBLOCK) < 0)printf("Open in1 errorn");return 1; if(fds2 = open (FIFO2, O_RDONLY|O_NONBLOCK) < 0) printf("Open in2 errorn");return 1;/*取出兩個文件描述符中的較大者*/ maxfd = MAX(

6、MAX(fds0, fds1), fds2); /*初始化讀集合inset,并在讀集合中加入相應(yīng)的描述集*/ FD_ZERO(&inset); for (i = 0; i < IN_FILES; i+) FD_SET(fdsi, &inset); FD_SET(0, &inset); tv.tv_sec = TIME_DELAY; tv.tv_usec = 0; /*循環(huán)測試該文件描述符是否準(zhǔn)備就緒,并調(diào)用select函數(shù)對相關(guān)文件描述符做對應(yīng)操作*/ while(FD_ISSET(fds0,&inset) | FD_ISSET(fds1,&ins

7、et) | FD_ISSET(fds2, &inset) /* 文件描述符集合的備份, 這樣可以避免每次進(jìn)行初始化 */ tmp_inset = inset; res = select(maxfd + 1, &tmp_inset, NULL, NULL, &tv); switch(res) case -1: printf("Select errorn"); return 1; break; case 0: /* Timeout */ printf("Time outn"); return 1; break; default: fo

8、r (i = 0; i < IN_FILES; i+) if (FD_ISSET(fdsi, &tmp_inset) memset(buf, 0, MAX_BUFFER_SIZE); real_read = read(fdsi, buf, MAX_BUFFER_SIZE); if (real_read < 0) if (errno != EAGAIN) return 1; else if (!real_read) close(fdsi); FD_CLR(fdsi, &inset); else if (i = 0) /* 主程序終端控制 */ if (buf0 = &

9、#39;q') | (buf0 = 'Q') return 1; else /* 顯示管道輸入字符串 */ bufreal_read = '0' printf("%s", buf); /* end of if */ /* end of for */ break; /* end of switch */ /*end of while */ return 0;(3)編譯并運(yùn)行該程序。 (4)另外打開兩個虛擬終端,分別鍵入“cat > in1”和“cat > in2”,接著在該管道中鍵入相關(guān)內(nèi)容,并觀察實驗結(jié)果。實驗結(jié)果分析實驗總結(jié)(包括過程總結(jié)、心得體會及實驗改進(jìn)意見等):1、過程總結(jié):1、在實驗的過程中注意編寫程序代碼的完善2、管道讀寫操作的時候尤其要注意必須要打開兩個終端窗口2、心得體會:通過編寫有名管道

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論