歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux open close read write lseek函數的使用

Linux open close read write lseek函數的使用

日期:2017/2/28 13:46:43   编辑:Linux教程

我們經常需要在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的使用就總結到這裡,如有問題,歡迎指正,謝謝。

Copyright © Linux教程網 All Rights Reserved