檔案io是指對檔案進行資料輸入與資料輸出,我們程式的本質就是對輸入的資料進行處理然後輸出,可是資料是在檔案中的,在linux下一切皆檔案,所以程式就是要實現對檔案的讀寫操作
可是我們程式不能直接去操作檔案,這個時候就需要系統提供呼叫介面來供我們使用從而根據系統介面處理讀寫資料。
我們在c語言中學習的幾個庫函式fopen,fclose,fseek等底層也是呼叫系統介面實現,例如fopen呼叫open函式,因為庫函式就是系統函式的一層封裝,他們是上下級呼叫關係
在系統呼叫中我們需要提供乙個媒介來傳遞檔案資訊與程式,我們一般用乙個整數來作為這個媒介,每當我們成功開啟乙個檔案的時候就會返回乙個檔案描述符來供read等使用,這個整數一般是呼叫open或者creat函式返回的。這個數字是程序pcb中files_structs這個結構體中檔案描述資訊的結構體陣列的下標
剛剛說了了檔案描述符是乙個整數,在linux下一般是0到1023之間。我們建立乙個程序直接開啟三個檔案,分別是標準輸入,標準輸出,標準錯誤,在庫函式中有三個檔案流指標指向這三個檔案,分別是stdin,stdout,stderr。
在檔案操作符中0對應的是標準輸入檔案,1對應的是標準輸出檔案,2對應的是標準錯誤檔案,所以我們不用開啟檔案可以直接用檔案操作符使用,不過由於平台的移植性與辨識度等原因,我們一般用stdin_fileno、stdout_fileno、stderr_fileno這三個巨集來表示這三個檔案的檔案描述符。
介紹完了io的基礎與檔案操作符等,我們接下來看看系統呼叫介面的函式。
read是在檔案描述符上執行讀操作的函式
ssize_t read(int fd, void *buf, size_t count);
引數解釋:
fd是檔案描述符,由open函式產生
buf表示要放置的緩衝區位置
count表示要讀取的位元組數
返回值:
成功返回讀取到的位元組數,失敗返回-1
ssize_t write(int fd, const void *buf, size_t count)
write是在乙個檔案操作符上進行寫操作的函式
引數介紹:
fd是檔案描述符
buf是緩衝區起始位置
count是位元組數
返回值成功返回位元組數失敗返回-1.
系統io(檔案io)
檔案描述符 檔案描述符 已開啟檔案的標誌,是非負整形數,當前可以最小作為新檔案的檔案描述符,預設範圍0 1024 可更改 檔案開啟 int open const char pathname,int flags,mode t mode 1.pathname 要開啟檔案的路徑 2.flags 開啟方式 ...
基礎IO 標準庫IO介面 系統呼叫IO介面
標準庫io介面 fopen fclose fread fwrite fseek file fopen const char path,const char mode r唯讀開啟,檔案不存在報錯 r 讀寫開啟,檔案不存在報錯 w只寫,檔案不存在則建立 若存在則清空原內容 w 讀寫開啟,檔案不存在則建立...
系統呼叫IO介面
int open const char pathname,int flags,mode t mode 功能 開啟檔案 pathname 指定要開啟的檔名稱 flages 選項引數 必選引數 o rdonly 讀 o wrnoly 寫 o rdwr 只能選一 讀寫 可選引數 o creat 若檔案存在...