Linux下基於檔案描述符的檔案操作

2021-09-22 21:02:05 字數 1425 閱讀 7825

int open(const char* pathname, int flags);//檔名,開啟方式

int open(const char* pathname, int flags, mode_t mode);//檔名,開啟方式 許可權

int create() //不常用

int close(int fd);

open出錯時返回-1。

flag表示開啟或建立的方式,mode表示檔案的訪問許可權。均通過二進位制位進行判斷。

對於open函式,如果檔案不存在,必須在flags中加上o_creat選項。

fb是檔案描述詞,是由open或create建立檔案時的返回值。

#include//檔案描述詞   緩衝區   長度

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

//檔案描述詞 緩衝區 長度

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

對於read和write函式,出錯返回-1,讀取到檔案結束符後返回0,其他情況返回讀寫個數。

read 在網路通訊,阻塞io情況下,當對端斷開時,read返回0 。於此類似的還有 recv函式。

與printf和scanf有所區別,read和write是將檔案讀至緩衝區或從緩衝區寫入檔案,是否會偏移呢?

a.讀寫過程中檔案描述詞fd不會改變,始終指向檔案。

b. read 過程中雖然是相同的檔案描述詞,但是會存在乙個偏移,不會讀取已經讀取過的檔案內容。也就是說對於檔案中存放「helloworld」,呼叫兩次相同的read,第一次會讀進緩衝區「hello」,第二次讀進緩衝區"world" 。緩衝區中內容會被覆蓋。

c. write過程類似,檔案中會產生偏移,而對於緩衝區不會,兩次呼叫write,緩衝區中存放「helloworld」,檔案中會是"hellohello"。

d.write和read共用乙個檔案中的偏移。

#include//將fd指定檔案的大小,改為引數length指定大小。

int ftruncate(int fd, off_t length);

fd必須表示的是開啟的可寫入的檔案描述詞。

如果原來檔案比length大,則超過部分會被刪除。

返回值 成功返回0, 失敗返回-1 。

#include#includeoff_t lseek(int fd, off_t offset, int whence);
whence /wens/ adv 從**;從何處。

offset表示偏移量

whence 可以取值為 seek_set,seek_cur,seek_end,分別表示檔案開頭,游標當前位置以及檔案尾。

linux檔案描述符fd windows下的控制代碼

在linux系統中一切皆可以看成是檔案,檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案 fd file descriptor 檔案描述符0,1,2分別給了標準輸入 標準輸出和錯誤輸出。ls l proc pid fd可以檢視某個程序所使用的fd 用lsof可以檢視 比如 lsof i 22 的...

linux檔案描述符

本文介紹了檔案描述符,1 首先說什麼是檔案描述符,它有什麼作用?檔案描述符是乙個簡單的整數,用以標明每乙個被程序所開啟的檔案和socket。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案,並指定訪問該檔案的方式,呼叫成功後返回乙個檔案描述符。creat 開啟乙個檔案,如果該檔案不存在,則建立它...

linux檔案描述符

當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符 0,1,2 分別與標準輸入 stdin 標準輸出 stdout 和標準錯誤 stderr 對應。因此,函式 scanf 使用 stdin,而函式 pri...