版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章I/O操作方式鄭謙益、韓京宇概述I/O操作方式操作方式文件文件I/O操作方式操作方式內(nèi)存的內(nèi)存的I/O映射映射文件鎖文件鎖終端終端I/O操作操作I/O操作方式I/O操作方式 阻塞方式 非阻塞方式 同步方式 異步方式阻塞方式概念 通常,在運(yùn)用程序發(fā)出I/O懇求后,假設(shè)I/O操作不能立刻完成,Linux內(nèi)核將發(fā)出讀寫(xiě)懇求的進(jìn)程暫時(shí)掛起,將CPU交給其他進(jìn)程,等I/O完成后,重新切換回原來(lái)的進(jìn)程繼續(xù)運(yùn)轉(zhuǎn),這種I/O處置方式稱為阻塞方式。 非阻塞方式概念 進(jìn)程在發(fā)出讀寫(xiě)懇求后,不論I/O能否真正完成,可立刻前往,繼續(xù)執(zhí)行。問(wèn)題在于如何獲知I/O操作曾經(jīng)完成,一種方法是不斷地查詢I/O形狀,另一
2、種方法是由操作系統(tǒng)通知I/O操作的完成,這種I/O處置方式稱為非阻塞方式。同步方式概念 進(jìn)程在發(fā)出文件讀寫(xiě)懇求后,假設(shè)需求進(jìn)程等待或經(jīng)過(guò)某種方式檢查I/O操作能否完成,從而決議能否繼續(xù)執(zhí)行后續(xù)的任務(wù),這種方式稱為同步I/O方式。異步方式異步方式 概念 進(jìn)程在發(fā)出文件讀寫(xiě)懇求后,假設(shè)進(jìn)程能繼續(xù)執(zhí)行其他任務(wù),由內(nèi)核以音訊的方式通知進(jìn)程懇求的I/O操作曾經(jīng)完成,無(wú)需等待或檢查I/O操作能否完成,這種方式稱為異步I/O方式;文件I/O操作方式文件I/O操作方式 同步阻塞I/O方式 同步非阻塞I/O方式 I/O多路復(fù)用方式 信號(hào)驅(qū)動(dòng)I/O方式 異步I/O方式同步阻塞I/O方式概念 通常,在進(jìn)展I/O操作
3、時(shí),必需等到I/O操作完成才干進(jìn)展下一步的操作,這種操作方式稱為同步阻塞I/O方式,同步阻塞I/O方式實(shí)例分析/ exam10-1.cint fd_line,fd_kb,fd_display;char chr_from_kb10;char chr_from_line10;void test()while (1) read(fd_kb, &chr_from_kb, 1); /非阻塞write(fd_line, &chr_from_kb, 1);read(fd_line, &chr_from_line, 1);/非阻塞write(fd_display, &chr_f
4、rom_line, 1);同步非阻塞I/O方式概念 在進(jìn)程發(fā)出文件讀寫(xiě)懇求后,無(wú)論I/O操作能否完成,立刻前往。這樣進(jìn)程可繼續(xù)執(zhí)行后續(xù)代碼。為了獲知文件的I/O操作能否完成,需不斷地對(duì)文件I/O形狀進(jìn)展測(cè)試。同步非阻塞I/O方式同步非阻塞I/O方式方法一: 在翻開(kāi)文件時(shí),設(shè)定翻開(kāi)的方式為非阻塞方式,例如: open(fifo1,O_RDONLY|O_NONBLOCK);方法二: 假設(shè)文件曾經(jīng)翻開(kāi),可經(jīng)過(guò)fcntl函數(shù)改動(dòng)文件的I/O方式.方法三: 假設(shè)文件曾經(jīng)翻開(kāi),也可經(jīng)過(guò)ioctl函數(shù)來(lái)改動(dòng)I/O操作的方式。同步非阻塞I/O方式頭文件#include #include #include 函數(shù)
5、原型int fcntl(int fildes, int cmd)int fcntl(int fildes, int cmd, long arg)功能設(shè)置文件描畫(huà)符的相關(guān)特性參數(shù)fildes文件描畫(huà)符cmd操作的指令arg操作的參數(shù)前往值錯(cuò)誤,前往-1,否那么,依操作而定多路復(fù)用多路復(fù)用I/O方式方式 概念 基于多路復(fù)用I/O方式的進(jìn)程可同時(shí)對(duì)多個(gè)文件描畫(huà)符的讀寫(xiě)形狀進(jìn)展檢測(cè),直到發(fā)現(xiàn)這些描畫(huà)符中某個(gè)的形狀發(fā)生了變化時(shí)前往。這闡明檢測(cè)到某文件的I/O操作曾經(jīng)完成。此時(shí),進(jìn)程可根據(jù)前往的形狀進(jìn)展真正的讀寫(xiě)操作。多路復(fù)用多路復(fù)用I/O方式方式多路復(fù)用多路復(fù)用I/O方式方式頭文件#include 函數(shù)
6、原型int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout)功能I/O多路復(fù)用參數(shù)n 表示最大的文件描畫(huà)符+1readfds 可讀文件描畫(huà)符集合writefds 可寫(xiě)文件描畫(huà)符集合exceptfds 異常文件描畫(huà)符集合timeout 超時(shí)終了時(shí)間前往值0 超時(shí)前往n假設(shè)檢測(cè)到文件描畫(huà)符形狀發(fā)生改動(dòng),前往形狀改動(dòng)的個(gè)數(shù)0 假設(shè)發(fā)生錯(cuò)誤,信號(hào)驅(qū)動(dòng)的I/O方式概念 信號(hào)驅(qū)動(dòng)I/O方式是利用文件描畫(huà)符的I/O形狀的變化,產(chǎn)生SIGIO信號(hào),經(jīng)過(guò)對(duì)SIGIO信號(hào)的處置,讀
7、寫(xiě)相應(yīng)的數(shù)據(jù)。信號(hào)驅(qū)動(dòng)的I/O方式信號(hào)驅(qū)動(dòng)的I/O方式實(shí)現(xiàn)步驟1. 利用signal或sigaction函數(shù)定義信號(hào)SIGIO的處置函數(shù)。2. 運(yùn)用fcntl函數(shù)對(duì)文件描畫(huà)符在形狀發(fā)生變化產(chǎn)生SIGIO信號(hào)時(shí),設(shè)置信號(hào)發(fā)送的對(duì)象。3. 在運(yùn)用open函數(shù)翻開(kāi)文件時(shí),或運(yùn)用fcntl函數(shù)對(duì)已翻開(kāi)的文件,設(shè)置為O_ASYNC方式。異步I/O方式概念 在進(jìn)程發(fā)出I/O讀寫(xiě)懇求后,無(wú)論I/O操作能否完成,立刻前往,繼續(xù)執(zhí)行后續(xù)的代碼,當(dāng)要求的I/O操作完成時(shí),內(nèi)核向發(fā)出懇求的進(jìn)程發(fā)送信號(hào),通知I/O操作已完成,此時(shí),操作的數(shù)據(jù)已就需,無(wú)需在內(nèi)核與用戶空間之間進(jìn)展拷貝,這種I/O操作方式稱為異步I/O方
8、式。異步I/O方式 在POSIX 1003.1規(guī)范中,定義了異步I/O方式的函數(shù)接口。Linux內(nèi)核從版本2.5開(kāi)場(chǎng)支持異步I/O方式,在文件操作集中添加了異步I/O的操作接口。API函數(shù)aio_read()aio_write()aio_error()aio_return()內(nèi)存的I/O映射內(nèi)存的I/O映射概念 內(nèi)存的I/O映射是將文件某區(qū)間的內(nèi)容映射至進(jìn)程的虛擬地址空間的某個(gè)區(qū)域的技術(shù)。經(jīng)過(guò)對(duì)文件的內(nèi)存I/O映射,可運(yùn)用戶對(duì)文件的操作轉(zhuǎn)換為對(duì)內(nèi)存的操作。內(nèi)存的I/O映射頭文件#include 函數(shù)原型void * mmap(void *start, size_t length, int pr
9、ot , int flags, int fd, off_t offset)功能將文件的內(nèi)容映射至內(nèi)存參數(shù)start內(nèi)存開(kāi)場(chǎng)位置length映射內(nèi)容的長(zhǎng)度prot設(shè)定存取權(quán)限flags設(shè)定運(yùn)轉(zhuǎn)方式fd文件描畫(huà)符offset在文件中的偏移量前往值勝利,前往內(nèi)存映射的開(kāi)場(chǎng)地址,否那么,前往-1文件鎖文件鎖文件鎖文件鎖當(dāng)多個(gè)進(jìn)程同時(shí)存取同一個(gè)文件時(shí),有能夠出現(xiàn)數(shù)據(jù)不一致的景象。為了防止這種景象的發(fā)生,在多個(gè)進(jìn)程同時(shí)存取同一個(gè)文件時(shí),必需遵守一定的規(guī)那么。鎖就是這樣一種機(jī)制。1. 共享鎖2. 互斥鎖文件鎖文件鎖頭文件#include 函數(shù)原型int flock(int fd, int op)功能a為一個(gè)
10、翻開(kāi)的文件描畫(huà)符上鎖或解鎖參數(shù)fd已翻開(kāi)的文件描畫(huà)符opa加鎖方式前往值勝利,前往0,否那么,前往-1,同時(shí)errno被設(shè)置終端終端I/O終端的行為方式終端的行為方式終端的行為的變化可經(jīng)過(guò)改動(dòng)其屬性來(lái)實(shí)現(xiàn),但由于終端所涉及的屬性比較多,因此,不同屬性值的組合,會(huì)使得終端表現(xiàn)出不同的行為方式。常用終端行為方式有以下三種:1. 規(guī)范方式2. 非規(guī)范方式3. 原始方式規(guī)范方式概念 這是我們常用的方式,是終端設(shè)備驅(qū)動(dòng)通常運(yùn)用的方式。終端驅(qū)動(dòng)將從鍵盤(pán)接納的字符暫時(shí)存放于編輯緩沖區(qū)。因此,用戶可對(duì)鍵盤(pán)輸入進(jìn)展行編輯,直至接納到回車鍵。終端驅(qū)動(dòng)在接納到回車鍵后,將編輯緩沖區(qū)中的內(nèi)容傳送給運(yùn)用程序。在這種方式
11、下,終端驅(qū)動(dòng)還擔(dān)任對(duì)一些特殊字符進(jìn)展處置,如CTRL-C等。非規(guī)范方式概念 在這種方式下,終端驅(qū)動(dòng)封鎖了編輯緩沖區(qū),驅(qū)動(dòng)將從鍵盤(pán)上接納的字符直接傳送給運(yùn)用程序,其中包括退格鍵和光標(biāo)挪動(dòng)鍵等,這些鍵不再具有編輯功能,但依然保管了對(duì)一些特殊字符的處置。原始方式概念 在這種方式下,終端驅(qū)動(dòng)不僅封鎖了編輯緩沖區(qū),而且也封鎖了對(duì)一些特殊字符的處置,如退格鍵、光標(biāo)挪動(dòng)鍵和CTRL-C鍵等。終端驅(qū)動(dòng)將接納的恣意一個(gè)字符都上傳給運(yùn)用程序。終端方式的設(shè)置API函數(shù)tcgetattr()tcsetattr()struct termios tcflag_t c_iflag; / 輸入方式tcflag_t c_oflag; / 輸出方式 tcflag_t c_cflag; / 控制方式tcflag_t c_lflag; / 本地方式cc_t c_ccNCCS; / 特殊控制字元終端方式的設(shè)置頭文件#include 函數(shù)原型int tcgetattr(int fd, struct termios *info)功能獲取終端設(shè)備驅(qū)動(dòng)程序的屬性參數(shù)fd 終端文件描畫(huà)符in
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年05月北京2024屆中國(guó)民生銀行資產(chǎn)管理部畢業(yè)生“未來(lái)銀行家”暑期管培生校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度房地產(chǎn)開(kāi)發(fā)項(xiàng)目承包商資金保障擔(dān)保合同3篇
- 2025年度拆遷安置補(bǔ)償合同模板(含房屋買(mǎi)賣)4篇
- 2025年度廠房用電安全改造安裝合同范本4篇
- 2025年度城市地下綜合管廊建設(shè)場(chǎng)地平整與施工合同4篇
- 2025年度茶園場(chǎng)地承包合同范本-茶樹(shù)種植基地合作經(jīng)營(yíng)4篇
- 2024年04月江蘇交通銀行信用卡中心蘇州分中心校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 臨時(shí)暑期工勞動(dòng)協(xié)議格式2024年版B版
- 2025年度茶園采摘加工一體化項(xiàng)目合作協(xié)議4篇
- 2025年度建筑材料運(yùn)輸安全管理與培訓(xùn)合同3篇
- 2024人教新版七年級(jí)上冊(cè)英語(yǔ)單詞英譯漢默寫(xiě)表
- 《向心力》參考課件4
- 2024至2030年中國(guó)膨潤(rùn)土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報(bào)告
- 【地理】地圖的選擇和應(yīng)用(分層練) 2024-2025學(xué)年七年級(jí)地理上冊(cè)同步備課系列(人教版)
- 2024年深圳中考數(shù)學(xué)真題及答案
- 土方轉(zhuǎn)運(yùn)合同協(xié)議書(shū)
- Module 3 Unit 1 Point to the door(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語(yǔ)三年級(jí)上冊(cè)
- 智能交通信號(hào)燈安裝合同樣本
- 安全生產(chǎn)法律法規(guī)清單(2024年5月版)
- 江蘇省連云港市2023-2024學(xué)年八年級(jí)下學(xué)期期末道德與法治試卷(含答案解析)
- 2024年大學(xué)試題(宗教學(xué))-佛教文化筆試考試歷年高頻考點(diǎn)試題摘選含答案
評(píng)論
0/150
提交評(píng)論