什麼是系統級I/O?
輸入/輸出(I/O)是在主存和外部裝置之間複制資料的過程。
Unix I/O中的關鍵抽象
所有的I/O裝置都被模型化為檔案,而所有的輸入和輸出都被當作對相應檔案的讀和寫來執行.
這種将裝置優雅地映射為檔案的方式,允許Linux核心引出一個簡單、低級的應用接口,成為Unix I/O,這使得所有的輸入和輸出都能以一種統一且一緻的方式來執行:
-
打開檔案。
核心記錄有關這個打開檔案的所有資訊。應用程式隻需要記住這個描述符。
-
Linux shell建立的每個程序開始時都有三個打開的檔案:
标準輸入(0)
标準輸出(1)
标準錯誤(2)
-
改變目前的檔案位置。
這個檔案位置是從檔案開頭起始的位元組偏移量。
-
讀寫檔案。
當檔案位置 >= 檔案大小的時候,會觸發EOF(=End Of File)的條件,應用程式能檢測這個條件。
在檔案結尾處并沒有明确的EOF符号。
-
關閉檔案。
無論一個程序因為何種原因終止時,核心都會關閉所有這個程序打開的檔案并釋放它們的記憶體資源。
stat以檔案名作為輸入,fstat以檔案描述符作為輸入。
以下說明了有哪些中繼資料:
補充:
什麼是檔案描述符?
每當你打開一個檔案就會獲得該檔案的檔案描述符fd(file discriptor),這個檔案描述符就是一個整數。每個程序在PCB(Process Control Block)中儲存着一份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有一個指向已打開檔案的指針。 如下圖所示:
圖中,檔案描述符即為檔案描述符數組的下标。
檔案描述符的配置設定規律:從目前未使用的最小的整數處開始配置設定 。比如說如果你打開一個檔案系統會自動為它打開三個檔案,分别是stdin,stdout,stderr,就是标準輸入,标準輸出,标準輸出。他們的檔案描述符分别是 0,1,2,也就是說當你的檔案打開時它的檔案描述符就從3開始配置設定了,如果你把那三個檔案關閉一個,例如,關掉标準輸入,則打開的檔案的檔案描述符将會填上0,讓後再往後配置設定。
标準 I/O:
C語言定義了一組進階輸入輸出函數,成為标準I/O庫,為程式員提供了Unix I/O的較進階别的替代。
标準I/O庫将一個打開的檔案模型化為一個流。
類型是FILE的流是對檔案描述符和流緩沖區的抽象。
各種I/O包的總結:
使用指導: