UNIX系統介面 重學C之八

2021-07-10 23:41:57 字數 908 閱讀 1167

在unix系統中,作業系統通過系統介面(也叫系統呼叫)來提供服務,系統呼叫時核心中的**,位於核心中。使用者的應用處於使用者空間中,因此使用者程序呼叫系統呼叫的過程,就是程序由使用者空間進入核心的過程。c語言的庫函式就是通過系統呼叫來實現其功能的,可以說系統呼叫為庫函式提供了底層的支援。這一章的內容主要就是介紹unix系統中用於輸入和輸出的系統呼叫,並介紹如何通過它們實現標準庫。

檔案描述符

在unix系統中所有的裝置都被看成是檔案系統中的檔案,因此在unix系統中的i/o操作都要通過讀檔案或者寫檔案來實現。這樣做的好處就是,可以通過同一套的介面實現對所有外圍裝置的訪問。書中詳細介紹了開啟乙個檔案的過程來介紹讀寫乙個外圍裝置的過程。檔案正常開啟後,作業系統將向程式返回乙個小的非負整數,這個整數就是檔案描述符。在這裡注意區別和庫函式中的檔案指標的概念,檔案指標是在庫函式中描述檔案的,它是對檔案描述符的包裝,包含有比檔案描述符更豐富的內容。

低階i/o——read和write

外部裝置的輸入與輸出是通過read和write來實現的。這兩個系統呼叫的一般格式如下:

int n_read = read(int fd, char *buf, int n);

int n_written = write(int fd, char *buf, int n);

讀檔案時返回值可能會小於請求的位元組數,如果返回為0,則表示已經讀到檔案結尾(eof);如果返回值為-1,則說明發生了錯誤。

寫檔案時返回值是實際寫入的位元組數,如果返回值與請求的位元組數不相等,則說明發生了錯誤。

open、create、close、unlink

open和create是用來開啟和建立檔案的。close則用來顯示的關閉已經開啟的檔案,如果沒有顯示的關閉檔案,那麼在程式結束執行是,作業系統會將檔案關閉。

lseek

隨機訪問

輸入與輸出 重學C之七

之前有寫過一篇部落格用來介紹c語言的i o庫函式,i o就是所謂的輸入與輸出,所以這篇部落格和之前的多少有一些重複的部分。輸入 輸出功能並不是c語言本身的組成部分。ansi標準精確的定義了這些函式,所以,在任何可以使用c語言的系統中都有這些函式的相容形式。在程式中使用標準庫提供的功能,程式可以不經修...

重學C 系列 復合型別之指標

指標是 指向 另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。定義指標型別的方法將宣告符寫成 d的形式,其中d是變數名。若乙個語句中定義了幾個指標變數,每個變數前面都要有宣告符 int p1,p2 定義了兩個指向int型物件的指標,p1 p2 double dp,dp2 定義了...

11 2 8重學C 之 靜態成員

include include includeusing namespace std 4.2 物件的初始化和清理 4.2.8 靜態成員 靜態成員變數 所有物件共享同乙份資料 在編譯階段分配記憶體 類內宣告,類外初始化 靜態成員函式 所有物件共享同一函式 靜態成員函式只能訪問靜態成員變數 class ...