open系列是 POSIX 定義的,是UNIX系統裡的system call,只能用在 POSIX 的作業系統上。使用open系列函數需要"#include <fcntl.h>".
基於檔案描述符的輸入輸出函數:
open:開啟一個檔案,並指定訪問該檔案的方式,調用成功後返回一個檔案描述符。
creat:開啟一個檔案,如果該檔案不存在,則建立它,調用成功後返回一個檔案描述符。
close:關閉檔案,進程對檔案所加的鎖全都被釋放。
read:從檔案描述符對應的檔案中讀取資料,調用成功後返回讀出的位元組數。
write:向檔案描述符對應的檔案中寫入資料,調用成功後返回寫入的位元組數。
ftruncate:把檔案描述符對應的檔案縮短到指定的長度,調用成功後返回0。
lseek:在檔案描述符對應的檔案裡把檔案指標設定到指定的位置,調用成功後返回新指標的位置。
fsync:將所有已寫入檔案中的資料真正寫到磁碟或其他下層裝置上,調用成功後返回0。
fstat:返迴文件描述符對應的檔案的相關資訊,把結果儲存在struct stat中,調用成功後返回0。
fchown:改變與開啟檔案相關聯的所有者和所有組,調用成功後返回0。
fchmod:把檔案描述符對應的檔案的許可權位改為指定的八進位模式,調用成功後返回0。
flock:用於向檔案描述符對應的檔案施加建議性鎖,調用成功後返回0。
fcntl:既能施加建議性鎖也能施加強制性鎖,能建立記錄鎖、讀取鎖和寫入鎖,調用成功後返回0。
dup:複製檔案描述符,返回沒使用的檔案描述符中最小的編號。
dup2:由使用者指定返回的檔案描述符的值,用來重新開啟或重新導向一個檔案描述符。
select:同時從多個檔案描述符讀取資料或向多個檔案描述符寫入資料。
檔案描述符的優點:相容POSIX標準,許多系統調用都依賴於它。
檔案描述符的缺點:不能移植到UNIX以外的系統上去,也不直觀。
1)write
#include <unistd.h>
size_t write(int fildes,const void *buf,size_t nbytes);
參數說明:
fildes:與檔案相對應的檔案描述符,可通過調用open函數擷取
buf:存放將寫入檔案的資料,可以是字串,也可是其他資料。其中buf是指向字串的指標
nbytes:需寫進檔案的位元組數
傳回值:
-1:寫入失敗
0:寫入0個位元組
x:已寫入x個位元組
2)read
#include <unistd.h>
size_t read(int fildes,char *buf,size_t nbytes);
參數說明:
fildes:檔案描述符
buf:存放從檔案中讀取的資料
nbytes:希望讀取的直接數
傳回值:
-1:讀取失敗
0:讀取0個位元組
x:已讀取x個位元組
3)open
參數說明:
path:檔案存放路徑;
oflags:開啟檔案。取值如下:
O_RDONLY:以唯讀方式開啟,O_WRONLY:以唯寫方式開啟,O_RDWR:以讀寫方式開啟
oflages參數中還包括下列可選模式的組合(用按位或操作)
O_APPEND:把寫入資料追加在檔案的末尾
O_TRUNC:把檔案長度設為0,丟棄已有的內容
O_CREAT:如果需要,就按參數mode中給出的訪問模式建立檔案
O_EXCL:已O_CREAT一起使用,確保調用者建立出檔案
4)close
#include <unistd.h>
int close(int fildes);
參數:
fildes:檔案描述符
返回:
success:0
fail:-1