linux 讀寫檔案

2021-06-26 14:07:07 字數 1546 閱讀 8925

在linux系統中,所有的裝置也都可以看做是檔案,與傳統的檔案一樣,利用系統呼叫或者c函式就可以實現對其操作。下面羅列幾個常用的函式:

一 creat函式

函式原型為:int creat( const char *pathname, mode_t mode);

pathname 指檔案的名字,可以包含目錄,如果沒有目錄資訊,則在當前工作目錄下建立指定的檔案。

mode 如下:

s_irusr     唯讀方式

s_iwusr    只寫方式

s_ixusr      執行方式

s_irwxu    可讀可寫可執行

二 open 函式

該函式有兩個原型,分別為:

int open( const char * pathname, int flags);

int open( const char * pathname, int flags, mode_t mode);

pathname 指檔案的名字,可以包含目錄,如果沒有目錄資訊,則在當前工作目錄下建立指定的檔案。

flags 檔案的屬性(比較多,列一些常用的)

o_rdonly  唯讀的方式開啟檔案;

o_wronly 只寫的方式開啟檔案;

o_rdwr    讀寫方式開啟檔案;

o_creat  如果檔案不存在,則自動建立檔案;同時還要指定檔案的屬性,就要呼叫三個引數的函式了。

o_trunc 如果檔案存在,並且以寫的方式開啟檔案,則檔案長度清零,原來檔案中的資料也會丟失;

o_nonblock 以非阻塞的方式開啟檔案,無論有無資料讀寫,都會立即返回到程序中;

o_sync 以同步的方式開啟檔案。

三 read函式

函式原型

int read(int fd, void * buf, int count);

從指定的檔案中讀取count個位元組資料到buf中,返回實際讀取成功的位元組數,有可能檔案中剩下的位元組小余count。返回0表示已經讀到檔案尾部或無可以讀取的資料,檔案讀寫位置隨著讀取的位置而變動。返回-1則表示出錯了。

四 write函式

函式原型

int write(int fd, const void * buf, int count);

從buf中寫count個位元組的資料到檔案fd中,返回實際寫入的位元組數。-1表示出錯了。

五 lseek函式

函式原型:

int lseek(int fd, off_t offset, int whence);

檔案指標從whence除異動offset個位元組,返回當前指標到檔案頭處的偏移量,whence為seek_set表示檔案開始,seek_end表示檔案末尾,seek_cur表示當前位置;返回-1表示出錯了。

六:access函式

函式原型:

int access(const char *pathname, int mode);

返回0表示檔案具有mode的許可權,-1則沒有響應的許可權。

七 sync函式

函式原型:

int sync();

將系統緩衝區中資料寫入到磁碟。

linux 檔案讀寫

本文只討論linux下檔案的讀寫機制,不涉及不同讀取方式如read,fread,cin等的對比,這些讀取方式本質上都是呼叫系統api read,只是做了不同封裝。以下所有測試均使用open,read,write這一套系統api 快取是用來減少高速裝置訪問低速裝置所需平均時間的元件,檔案讀寫涉及到計算...

linux核心讀寫檔案

在vfs的支援下,使用者態程序讀寫任何型別的檔案系統都可以使用read和write著兩個系統呼叫,但是在linux核心中沒有這樣的系統呼叫我們如何操作檔案呢?我們知道read和write在進入核心態之後,實際執行的是sys read 和sys write,但是檢視核心源 發現這些操作檔案的函式都沒有...

Linux 檔案讀寫流程

讀檔案流程 程序呼叫庫函式向核心發起讀檔案請求 核心通過檢查程序的檔案描述符定位到虛擬檔案系統的已開啟檔案列表表項 呼叫該檔案可用的系統呼叫函式read read 函式通過檔案表項鍊接到目錄項模組,根據傳入的檔案路徑,在目錄項模組中檢索,找到該檔案的inode 在inode中,通過檔案內容偏移量計算...