GNULinux編程第10章ppt課件_第1頁
GNULinux編程第10章ppt課件_第2頁
GNULinux編程第10章ppt課件_第3頁
GNULinux編程第10章ppt課件_第4頁
GNULinux編程第10章ppt課件_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章I/O操作方式鄭謙益、韓京宇概述I/O操作方式操作方式文件文件I/O操作方式操作方式內(nèi)存的內(nèi)存的I/O映射映射文件鎖文件鎖終端終端I/O操作操作I/O操作方式I/O操作方式 阻塞方式 非阻塞方式 同步方式 異步方式阻塞方式概念 通常,在運用程序發(fā)出I/O懇求后,假設(shè)I/O操作不能立刻完成,Linux內(nèi)核將發(fā)出讀寫懇求的進(jìn)程暫時掛起,將CPU交給其他進(jìn)程,等I/O完成后,重新切換回原來的進(jìn)程繼續(xù)運轉(zhuǎn),這種I/O處置方式稱為阻塞方式。 非阻塞方式概念 進(jìn)程在發(fā)出讀寫懇求后,不論I/O能否真正完成,可立刻前往,繼續(xù)執(zhí)行。問題在于如何獲知I/O操作曾經(jīng)完成,一種方法是不斷地查詢I/O形狀,另一

2、種方法是由操作系統(tǒng)通知I/O操作的完成,這種I/O處置方式稱為非阻塞方式。同步方式概念 進(jìn)程在發(fā)出文件讀寫懇求后,假設(shè)需求進(jìn)程等待或經(jīng)過某種方式檢查I/O操作能否完成,從而決議能否繼續(xù)執(zhí)行后續(xù)的任務(wù),這種方式稱為同步I/O方式。異步方式異步方式 概念 進(jìn)程在發(fā)出文件讀寫懇求后,假設(shè)進(jìn)程能繼續(xù)執(zhí)行其他任務(wù),由內(nèi)核以音訊的方式通知進(jìn)程懇求的I/O操作曾經(jīng)完成,無需等待或檢查I/O操作能否完成,這種方式稱為異步I/O方式;文件I/O操作方式文件I/O操作方式 同步阻塞I/O方式 同步非阻塞I/O方式 I/O多路復(fù)用方式 信號驅(qū)動I/O方式 異步I/O方式同步阻塞I/O方式概念 通常,在進(jìn)展I/O操作

3、時,必需等到I/O操作完成才干進(jìn)展下一步的操作,這種操作方式稱為同步阻塞I/O方式,同步阻塞I/O方式實例分析/ 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ā)出文件讀寫懇求后,無論I/O操作能否完成,立刻前往。這樣進(jìn)程可繼續(xù)執(zhí)行后續(xù)代碼。為了獲知文件的I/O操作能否完成,需不斷地對文件I/O形狀進(jìn)展測試。同步非阻塞I/O方式同步非阻塞I/O方式方法一: 在翻開文件時,設(shè)定翻開的方式為非阻塞方式,例如: open(fifo1,O_RDONLY|O_NONBLOCK);方法二: 假設(shè)文件曾經(jīng)翻開,可經(jīng)過fcntl函數(shù)改動文件的I/O方式.方法三: 假設(shè)文件曾經(jīng)翻開,也可經(jīng)過ioctl函數(shù)來改動I/O操作的方式。同步非阻塞I/O方式頭文件#include #include #include 函數(shù)

5、原型int fcntl(int fildes, int cmd)int fcntl(int fildes, int cmd, long arg)功能設(shè)置文件描畫符的相關(guān)特性參數(shù)fildes文件描畫符cmd操作的指令arg操作的參數(shù)前往值錯誤,前往-1,否那么,依操作而定多路復(fù)用多路復(fù)用I/O方式方式 概念 基于多路復(fù)用I/O方式的進(jìn)程可同時對多個文件描畫符的讀寫形狀進(jìn)展檢測,直到發(fā)現(xiàn)這些描畫符中某個的形狀發(fā)生了變化時前往。這闡明檢測到某文件的I/O操作曾經(jīng)完成。此時,進(jìn)程可根據(jù)前往的形狀進(jìn)展真正的讀寫操作。多路復(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 表示最大的文件描畫符+1readfds 可讀文件描畫符集合writefds 可寫文件描畫符集合exceptfds 異常文件描畫符集合timeout 超時終了時間前往值0 超時前往n假設(shè)檢測到文件描畫符形狀發(fā)生改動,前往形狀改動的個數(shù)0 假設(shè)發(fā)生錯誤,信號驅(qū)動的I/O方式概念 信號驅(qū)動I/O方式是利用文件描畫符的I/O形狀的變化,產(chǎn)生SIGIO信號,經(jīng)過對SIGIO信號的處置,讀

7、寫相應(yīng)的數(shù)據(jù)。信號驅(qū)動的I/O方式信號驅(qū)動的I/O方式實現(xiàn)步驟1. 利用signal或sigaction函數(shù)定義信號SIGIO的處置函數(shù)。2. 運用fcntl函數(shù)對文件描畫符在形狀發(fā)生變化產(chǎn)生SIGIO信號時,設(shè)置信號發(fā)送的對象。3. 在運用open函數(shù)翻開文件時,或運用fcntl函數(shù)對已翻開的文件,設(shè)置為O_ASYNC方式。異步I/O方式概念 在進(jìn)程發(fā)出I/O讀寫懇求后,無論I/O操作能否完成,立刻前往,繼續(xù)執(zhí)行后續(xù)的代碼,當(dāng)要求的I/O操作完成時,內(nèi)核向發(fā)出懇求的進(jìn)程發(fā)送信號,通知I/O操作已完成,此時,操作的數(shù)據(jù)已就需,無需在內(nèi)核與用戶空間之間進(jìn)展拷貝,這種I/O操作方式稱為異步I/O方

8、式。異步I/O方式 在POSIX 1003.1規(guī)范中,定義了異步I/O方式的函數(shù)接口。Linux內(nèi)核從版本2.5開場支持異步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)程的虛擬地址空間的某個區(qū)域的技術(shù)。經(jīng)過對文件的內(nèi)存I/O映射,可運用戶對文件的操作轉(zhuǎn)換為對內(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)存開場位置length映射內(nèi)容的長度prot設(shè)定存取權(quán)限flags設(shè)定運轉(zhuǎn)方式fd文件描畫符offset在文件中的偏移量前往值勝利,前往內(nèi)存映射的開場地址,否那么,前往-1文件鎖文件鎖文件鎖文件鎖當(dāng)多個進(jìn)程同時存取同一個文件時,有能夠出現(xiàn)數(shù)據(jù)不一致的景象。為了防止這種景象的發(fā)生,在多個進(jìn)程同時存取同一個文件時,必需遵守一定的規(guī)那么。鎖就是這樣一種機(jī)制。1. 共享鎖2. 互斥鎖文件鎖文件鎖頭文件#include 函數(shù)原型int flock(int fd, int op)功能a為一個

10、翻開的文件描畫符上鎖或解鎖參數(shù)fd已翻開的文件描畫符opa加鎖方式前往值勝利,前往0,否那么,前往-1,同時errno被設(shè)置終端終端I/O終端的行為方式終端的行為方式終端的行為的變化可經(jīng)過改動其屬性來實現(xiàn),但由于終端所涉及的屬性比較多,因此,不同屬性值的組合,會使得終端表現(xiàn)出不同的行為方式。常用終端行為方式有以下三種:1. 規(guī)范方式2. 非規(guī)范方式3. 原始方式規(guī)范方式概念 這是我們常用的方式,是終端設(shè)備驅(qū)動通常運用的方式。終端驅(qū)動將從鍵盤接納的字符暫時存放于編輯緩沖區(qū)。因此,用戶可對鍵盤輸入進(jìn)展行編輯,直至接納到回車鍵。終端驅(qū)動在接納到回車鍵后,將編輯緩沖區(qū)中的內(nèi)容傳送給運用程序。在這種方式

11、下,終端驅(qū)動還擔(dān)任對一些特殊字符進(jìn)展處置,如CTRL-C等。非規(guī)范方式概念 在這種方式下,終端驅(qū)動封鎖了編輯緩沖區(qū),驅(qū)動將從鍵盤上接納的字符直接傳送給運用程序,其中包括退格鍵和光標(biāo)挪動鍵等,這些鍵不再具有編輯功能,但依然保管了對一些特殊字符的處置。原始方式概念 在這種方式下,終端驅(qū)動不僅封鎖了編輯緩沖區(qū),而且也封鎖了對一些特殊字符的處置,如退格鍵、光標(biāo)挪動鍵和CTRL-C鍵等。終端驅(qū)動將接納的恣意一個字符都上傳給運用程序。終端方式的設(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ū)動程序的屬性參數(shù)fd 終端文件描畫符in

溫馨提示

  • 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

提交評論