日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fcntl设置FD_CLOEXEC

發布時間:2024/3/13 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fcntl设置FD_CLOEXEC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://hi.baidu.com/passerryan/item/d81eac1671ce3d5cf0090e2b


這是fcntl的一個Flag標志。

fcntl(fd, F_SETFD, FD_CLOEXEC);

// 這里設置為FD_CLOEXEC表示當程序執行exec函數時本fd將被系統自動關閉,表示不傳遞給exec創建的新進程, 如果設置為fcntl(fd, F_SETFD, 0);那么本fd將保持打開狀態復制到exec創建的新進程中

FD_CLOEXEC用來設置文件的close-on-exec狀態標準。在exec()調用后,close-on-exec標志為0的情況,此文件不被關閉。非零則在exec()后被關閉。默認close-on-exec狀態為0,需要通過FD_CLOEXEC設置

---------------------------------------------------------------------------------------------------------------

int flags;
int dummy = 0;
if ((flags = fcntl(fd, F_GETFL, dummy)) < 0){
??? debug(50, 0) ("FD %d: fcntlF_GETFL: %s\n", fd, xstrerror());
??? return;
}
if (fcntl(fd, F_SETFD,?flags | FD_CLOEXEC) <0)
?? debug(50, 0) ("FD %d: setclose-on-exec failed: %s\n", fd, xstrerror());

---------------------------------------------------------------------------------------------------------------

fcntl(文件描述詞操作)

相關函數

open,flock

表頭文件

#include<unistd.h>
#include<fcntl.h>

定義函數

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.

總結

以上是生活随笔為你收集整理的fcntl设置FD_CLOEXEC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。