《Linux函數調用手冊》之___fcntl文件描述詞操作
定義:
int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
表頭文件:
#include<unistd.h>
#include<fcntl.h>
說明:
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.
相關函數:
open, flock
返回頂部 | 《Linux函數調用大全》 | 《Linux命令大全》 | Linux專欄 广西11选五走势图彩经网