?fcntl()用來操作文件描述詞的一些特性。參數(shù)fd代表欲設置的文件描述詞,參數(shù)cmd代表欲操作的指令。
有以下幾種情況:
F_DUPFD用來查找大于或等于參數(shù)arg的最小且仍未使用的文件描述詞,并且復制參數(shù)fd的文件描述詞。執(zhí)行成功則返回新復制的文件描述詞。請參考dup2()。F_GETFD取得close-on-exec旗標。若此旗標的FD_CLOEXEC位為0,代表在調(diào)用exec()相關(guān)函數(shù)時文件將不會關(guān)閉。
F_SETFD?設置close-on-exec?旗標。該旗標以參數(shù)arg?的FD_CLOEXEC位決定。
F_GETFL?取得文件描述詞狀態(tài)旗標,此旗標為open()的參數(shù)flags。
F_SETFL?設置文件描述詞狀態(tài)旗標,參數(shù)arg為新旗標,但只允許O_APPEND、O_NONBLOCK和O_ASYNC位的改變,其他位的改變將不受影響。
F_GETLK?取得文件鎖定的狀態(tài)。
F_SETLK?設置文件鎖定的狀態(tài)。此時flcok?結(jié)構(gòu)的l_type?值必須是F_RDLCK、F_WRLCK或F_UNLCK。如果無法建立鎖定,則返回-1,錯誤代碼為EACCES?或EAGAIN。
F_SETLKW?F_SETLK?作用相同,但是無法建立鎖定時,此調(diào)用會一直等到鎖定動作成功為止。若在等待鎖定的過程中被信號中斷時,會立即返回-1,錯誤代碼為EINTR。參數(shù)lock指針為flock?結(jié)構(gòu)指針,定義如下
struct?flcok
{
short?int?l_type;?/*?鎖定的狀態(tài)*/
short?int?l_whence;/*決定l_start位置*/
off_t?l_start;?/*鎖定區(qū)域的開頭位置*/
off_t?l_len;?/*鎖定區(qū)域的大小*/
pid_t?l_pid;?/*鎖定動作的進程*/
};
l_type?有三種狀態(tài):
F_RDLCK?建立一個供讀取用的鎖定
F_WRLCK?建立一個供寫入用的鎖定
F_UNLCK?刪除之前建立的鎖定
l_whence?也有三種方式:
SEEK_SET?以文件開頭為鎖定的起始位置。
SEEK_CUR?以目前文件讀寫位置為鎖定的起始位置
SEEK_END?以文件結(jié)尾為鎖定的起始位置。
?
返回值??成功則返回0,若有錯誤則返回-1,錯誤原因存于errno.