首頁 > 軟體

Linux open close read write lseek函數的使用

2020-06-16 17:27:30

我們經常需要在Linux中進行檔案操作,今天我就來分享下檔案操作用到的一些函數
1 open
所需標頭檔案:

函數原型:int open(const char *pathname,flags,int perms)
pathname:被開啟的檔名,可包含路徑
flag :檔案開啟的方式,引數可以通過“|” 組合構成,但前3 個引數不能互相重合。
O_REONLY :唯讀方式開啟檔案
O_WRONLY :可寫方式開啟檔案
O_RDWR :讀寫方式開啟檔案
O_CREAT :如果檔案不存在時就建立一個新檔案,並用第三個引數為其設定許可權。
O_EXCL :如果使用O_CREAT 時檔案存在,則可返回錯誤資訊。這一引數可測試檔案是否存在。
O_NOCTTY :使用本引數時,如檔案為終端,那麼終端不可以作為呼叫open ()系統呼叫的那個進程的控制終端。
O_TRUNC :如檔案已經存在,並且以唯讀或只寫成功開啟,那麼會先全部刪除檔案中原因資料。
O+APPEND :以新增方式開啟檔案,在開啟檔案的同時,檔案指標指向檔案末尾。
perms:許可權,可以用數位表示

返回值,成功返回檔案描述符,失敗返回-1

2 close
函數原型:int close (int fd )
函數輸入值:fd :檔案描述符
函數返回值:成功:0 出錯:-1

來看個例子:

先讓使用者輸入一個檔案,以可讀可寫的方式開啟,如果不存在就建立,許可權是0666

hello就是新建立的檔案
我們看下hello的許可權

並不是0666,而是0644,這是因為umask,umask我們前面總結過了

是相剪的結果,我們可以在程式碼中指定umask的值為0000,那麼我們建立的這個hello就是正確的許可權了

再來試下

我們看到現在hello的許可權就是0666了

3 read
所需標頭檔案:

函數原型:ssize_t read(int fd,void *buf,size_t count)
fd: 檔案描述符
Buf :指定記憶體讀出資料的緩衝區
Count :指定讀出的位元組數
函數返回值:成功:讀出的位元組數 0 :已到達檔案尾 -1 :出錯

看例子:

我們先建立一個read.txt,隨便寫點內容


memset是分配記憶體空間

4 write
所需標頭檔案

函數原型: ssize_t write(int fd,void *buf,size_t count)
函數傳入值:
fd: 檔案描述符
Buf :指定記憶體寫入資料的緩衝區
Count :指定讀出的位元組數
函數返回值:成功:已寫的位元組數 -1 :出錯

例子:

5 lseek
所需標頭檔案

函數原型:off_t lseek(int fd,off_t offset,int whence)
函數傳入值:
fd: 檔案描述符
Offset :偏移量,每一讀寫操作所需要移動的距離,單位是位元組的數量,可正可負(向前移,向後移)
Whence :當前位置的基點:
SEEK_SET :當前位置為檔案開頭,新位置為偏移量的大小
SEEK_CUR :當前位置為檔案指標位置,新位置為當前位置加上偏移量
SEEK_END :當前位置為檔案的結尾,新位置為檔案的大小加上偏移量大小

例子:

好了,Linux open close read write lseek的使用就總結到這裡,如有問題,歡迎指正,謝謝。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-11/137499.htm


IT145.com E-mail:sddin#qq.com