unix系統中的大多數檔案i/o只需要用到5個函式:open、read、write、lseek以及close。這些函式經常被稱為不帶緩衝的i/o。術語「不帶緩衝」指的是每個read和write都呼叫核心中的乙個系統呼叫。
檔案描述符
對於核心而言,所有開啟的檔案都通過檔案描述符引用。檔案描述符是乙個非負整數,變化範圍是0~open_max(允許每個程序最多開啟的檔案數)。當開啟乙個現有檔案或建立乙個新檔案時,核心向程序返回乙個檔案描述符。當讀或寫乙個檔案時,使用open或create返回的檔案描述符標識該檔案,將其作為引數傳送給read或write。
open函式
開啟或建立乙個檔案。若成功則返回檔案描述符,若出錯則返回-1。
#include
int open(const char *pathname, int oflag, ... /* mode_t mode */);
僅當建立新檔案時才使用第三個引數。
create函式
建立乙個新檔案。若成功則返回為只寫開啟的檔案描述符,若出錯則返回-1。
#include
int create(const char *pathname, mode_t mode);
create的乙個不足之處是它以只寫方式開啟所建立的檔案。現在open函式提供了選項o_create和o_trunc,於是也就不再需要create函式。
close函式
關閉乙個開啟的檔案。若成功則返回0,若出錯則返回-1。
#include
int close(int filedes);
關閉乙個檔案時還會釋放該程序加在該檔案上的所有記錄鎖。
當乙個程序終止時,核心自動關閉它所有開啟的檔案。很多程式都利用這一功能而不顯示地用close關閉開啟的檔案。
lseek函式
顯示地為乙個開啟的檔案設定其偏移量。若成功則返回新的檔案偏移量,若出錯則返回-1。
#include
off_t lseek(int filedes, off_t offset, int whence);
帶緩衝的IO和不帶緩衝的IO
首先說說帶緩衝的i o是什麼意思,在unix環境高階程式設計裡面,是這樣解釋的 術語不帶緩衝指的是每個read和write都呼叫核心中的乙個系統呼叫。所有的磁碟i o都要經過核心的塊緩衝 也稱核心的緩衝區快取記憶體 唯一例外的是對原始磁碟裝置的i o。既然read或write的資料都要被核心緩衝,那...
帶緩衝的IO和不帶緩衝的IO
檔案描述符 檔案描述符是乙個小的非負整數,是核心用來標識特定程序正在訪問的檔案 標準輸入 輸出 出錯 shell為每個程式開啟了三個檔案描述符,stdin fileon,stdout fileon,stderr fileon,預設這三個檔案描述符都鏈向終端 不帶緩衝的io 函式open read w...
帶緩衝I O 和 不帶緩衝I O詳解
帶快取的檔案操作 是標準c 庫的實現,第一次呼叫帶快取的檔案操作函式時標準庫會自動分配記憶體並且讀出一段固定大小的內容儲存在快取中。所以以後每次的讀寫操作並不是針對硬碟上的檔案直接進行的,而是針對記憶體中的快取的。何時從硬碟中讀取檔案或者向硬碟中寫入檔案有標準庫的機制控制。不帶快取的檔案操作通常都是...