天天看點

linux fcntl登出信号,fcntl · Linux C API 參考手冊 · 看雲

## fcntl ##

檔案描述詞操作

### 相關函數 ###

open,flock

### 表頭檔案 ###

```

#include

#include

```

### 定義函數 ###

```

int fcntl(int fd, int cmd);

int fcntl(int fd, int cmd, long arg);

int fcntl(int fd, int cmd, struct flock *lock);

```

### 函數說明 ###

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;

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.