版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、寧德師范學院計算機系實驗報告(2015 2016 學年 第 二 學期)課程名稱 嵌入式操作系統(tǒng)(Linux) 實驗名稱 實驗7 管道通信實驗 專 業(yè) 計算機科學與技術(專升本) 年 級 15級 組 號 09 成員1學號 B2015102320 成員1姓名 陳朋朋 成員2學號 B2015102323 成員2姓名 林振賢 指導教師 黃進華 實驗日期 2016-5-30 實驗目的與要求:通過編寫有名管道多路通信實驗,大家可進一步熟練掌握管道的創(chuàng)建、讀寫等操作,同時,也復習使用select函數(shù)實現(xiàn)管道的通信。實驗設備(環(huán)境): 每組一臺安裝VMware Workstation的計算機。實驗內(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/* 多路復用輸入文件數(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,并在讀集合中加入相應的描述集*/ 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)測試該文件描述符是否準備就緒,并調(diào)用select函數(shù)對相關文件描述符做對應操作*/ while(FD_ISSET(fds0,&inset) | FD_ISSET(fds1,&ins
7、et) | FD_ISSET(fds2, &inset) /* 文件描述符集合的備份, 這樣可以避免每次進行初始化 */ 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)編譯并運行該程序。 (4)另外打開兩個虛擬終端,分別鍵入“cat > in1”和“cat > in2”,接著在該管道中鍵入相關內(nèi)容,并觀察實驗結果。實驗結果分析實驗總結(包括過程總結、心得體會及實驗改進意見等):1、過程總結:1、在實驗的過程中注意編寫程序代碼的完善2、管道讀寫操作的時候尤其要注意必須要打開兩個終端窗口2、心得體會:通過編寫有名管道
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3 紙編花籃(說課稿)蘇教版五年級下冊綜合實踐活動
- 2023七年級數(shù)學下冊 第三章 變量之間的關系 1 用表格表示的變量間關系說課稿 (新版)北師大版
- 6我參與 我奉獻《友善相待》說課稿-2023-2024學年道德與法治五年級下冊統(tǒng)編版
- 2024年秋八年級語文上冊 第一單元 1《消息二則》說課稿 新人教版
- 16 太陽(說課稿)-2024-2025學年統(tǒng)編版語文五年級上冊
- 2024-2025學年新教材高中化學 第一章 物質(zhì)及其變化 1.2.1 電解質(zhì)的電離說課稿 新人教版必修第一冊001
- 20 小壁虎借尾巴 說課稿-2024-2025學年語文一年級下冊統(tǒng)編版
- 2023七年級英語上冊 Unit 7 How much are these socks第1課時說課稿(新版)人教新目標版
- 四氟丙醇項目融資渠道探索
- 飛機盒項目融資渠道探索
- 《幼兒園健康》課件精1
- 刑事案件模擬法庭劇本完整版五篇
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開心英語四年級上冊全冊練習
- Hadoop大數(shù)據(jù)開發(fā)實例教程高職PPT完整全套教學課件
- 企業(yè)中層管理人員測評問題
- 人教版高中地理必修一全冊測試題(16份含答案)
- 《民航服務溝通技巧》教案第11課孕婦旅客服務溝通
- 新東方四級詞匯-正序版
- 面向機器人柔順操作的力位精準控制方法研究共3篇
- 《地下工程測試技術》課程教學大綱
評論
0/150
提交評論