Linux下基於文件描述符的文件操作

文件打開與關閉

int open(const char* pathname, int flags);//文件名,打開方式
int open(const char* pathname, int flags, mode_t mode);//文件名,打開方式  權限
int create() 	//不常用
int close(int fd);

  1. open出錯時返回-1。
  2. flag表示打開或創建的方式,mode表示文件的訪問權限。均通過二進制位進行判斷。
  3. 對於open函數,如果文件不存在,必須在flags中加上O_CREAT選項。
  4. fb是文件描述詞,是由open或create創建文件時的返回值。

文件的讀寫

#include<unistd.h>
//文件描述詞   緩衝區   長度
ssize_t read(int fd, void* buf, size_t count); 
//文件描述詞   緩衝區   長度
ssize_t write(int fd, const void* buf, size_t count); 
  1. 對於read和write函數,出錯返回-1,讀取到文件結束符後返回0,其他情況返回讀寫個數。
  2. read 在網絡通信,阻塞IO情況下,當對端斷開時,read返回0 。於此類似的還有 recv函數。
  3. 與printf和scanf有所區別,read和write是將文件讀至緩衝區或從緩衝區寫入文件,是否會偏移呢?
    a.讀寫過程中文件描述詞fd不會改變,始終指向文件。
    b. read 過程中雖然是相同的文件描述詞,但是會存在一個偏移,不會讀取已經讀取過的文件內容。也就是說對於文件中存放“HelloWorld”,調用兩次相同的read,第一次會讀進緩衝區“Hello”,第二次讀進緩衝區"World" 。緩衝區中內容會被覆蓋。
    c. write過程類似,文件中會產生偏移,而對於緩衝區不會,兩次調用write,緩衝區中存放“HelloWorld”,文件中會是"HelloHello"。
    d.write和read共用一個文件中的偏移。

改變文件大小

#include<unistd.h>
//將fd指定文件的大小,改爲參數length指定大小。
int ftruncate(int fd,  off_t length);
  1. fd必須表示的是打開的可寫入的文件描述詞。
  2. 如果原來文件比length大,則超過部分會被刪除。
  3. 返回值 成功返回0, 失敗返回-1 。

文件定位

#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  1. whence /wens/ adv 從哪裏;從何處。
  2. offset表示偏移量
  3. whence 可以取值爲 SEEK_SET,SEEK_CUR,SEEK_END,分別表示文件開頭,光標當前位置以及文件尾。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章