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