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相关推荐
- linux fcntl 设置阻塞,Linux fcntl函数设置阻塞与非阻塞
转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL 设置给arg描述符 ...
- fcntl(nListenId, F_SETFD, FD_CLOEXEC) 的作用
转自 http://blog.csdn.net/ustc_dylan/article/details/6930189 通过fcntl设置FD_CLOEXEC标志有什么用? close on exec, ...
- Android 启动分析 1
1.概述 Android虽然被称作一种操作系统,其实它仍然使用的Linux的kernel.所以本质上可以说,Android是一个适用于移动设备的Linux发行版.也就是说,之前的分析Linux内核的经 ...
- Linux应用程序编程
系统编程概念 库函数:C语言标准库中ANSI C.ISO C.GNU C.POSIX ANSI C标准同时出现的就是ISO组织,将ANSI C加入了ISO的大家庭,定义了ISO C.除了在格式和排版等 ...
- Linux fcntl 函数详解
接口 #include <fcntl.h>int fcntl(int fd, int cmd, ...); 返回值: 正确返回值根据命令码而定,错误返回-1. fcntl是用来修改已经打开 ...
- Linux fcntl 函数全解
文章目录 一.函数声明 1.1 cmd可选值 注意: 二.实例 2.1 F_DUPFD / F_DUP_CLOEXEC(Duplicating a file descriptor) 2.2 F_GET ...
- java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式
1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket( _In_ int af, ...
- linux 高级IO函数之fcntl mmap/munmap
fcntl函数提供了对文件描述符的各种控制操作.另外一个常见的控制文件描述符属性和行为的系统调用是ioctl,而且ioctl比fcntl能够执行更多的控制.但是对于控制文件描述符常用的属性和行为,fc ...
- IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模 ...
最新文章
- 数据采集与分析的那些事——从数据埋点到AB测试
- 测试nb信号的软件_NB-IoT和LORA,谁才是真正的低功耗?从数据看真相
- VTK:可视化算法之LOxGrid
- sscanf,sscanf_s及其相关用法(字符串格式化为其他类型)
- 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
- Server object instance creation failed on all SOC machines
- [Java] 蓝桥杯 BASIC-1 基础练习 闰年判断
- 数据库 : 事物以及隔离性导致的问题
- 我们公司使用了 6 年的分布式锁,很是牛逼啊!
- 黄聪:css3实现图片划过一束光闪过效果(图片光影掠过效果)
- MATLAB如何配平化学方程,【如何配平化学方程式】作业帮
- 【IoT】5.Business Strategy 商业战略
- java当前不可用,java代码向服务端狂发消息,导致的服务器连接通道不可用
- Nand Flash控制器
- 浙大提出神经3D重建新工作!收录图形学顶会SIGGRAPH 2022
- 记录一下之前写的文章--测试之不可承受之轻
- 数据技术-分析报告如何写
- android开发者mac(含M1芯片)电脑全新配置2022
- 【嵌入式底层知识修炼】基于通用消抖算法,拓展通用非阻塞Key按键识别算法
- IE8和IE9对于前端来说有什么区别