fcntl的close-on-exec标志
来源:互联网 发布:淘宝客微信转发软件 编辑:程序博客网 时间:2024/04/27 22:54
每个文件描述符都有一个close-on-exec标志。默认情况下,这个标志最后一位被设置为 0。这个标志符的具体作用在于当开辟其他进程调用exec()族函数时,在调用exec函数之前为exec族函数释放对应的文件描述符。
我们来看一下具体的实例。这是两个程序:
- //file:fcntl
- int main()
- {
- pid_t pid;
- fd = open("test.txt",O_RDWR|O_APPEND);
- if (fd == -1)
- ##printf("open err/n");
- printf("fd = %d",fd);
- printf("fork!/n");
- fcntl(fd, F_SETFD, 1);
- char *s="ooooooooooooooooooo";
- pid = fork();
- if(pid == 0)
- execl("ass", "./ass", &fd, NULL);
- wait(NULL);
- write(fd,s,strlen(s));
- close(fd);
- return 0;
- }
- //ass 源代码
- int main(int argc, char *argv[])
- {
- int fd;
- printf("argc = %d ",argc);
- fd = *argv[1];
- printf("fd = %d",fd);
- char *s = "zzzzzzzzzzzzzzzzzzz";
- write(fd, (void *)s, strlen(s));
- close(fd);
- return 0;
- }
PS:那个test.txt提前已经创建 为空文件~
fcntl(fd, F_SETFD, 1) 此句将fd的close-on-exec 标志设置为1,开启此标志。那么当子进程调用execl函数时,execl执行ass,ass是不能向fd内写入的,因为在调用execl函数之前系统已经讲子进程的此文件描述符关闭了。(attention:这里是子进程!)
但是如果将 fcntl(fd, F_SETFD, 1)改为fcntl(fd, F_SETFD, 0),或者直接将此句注释掉,那么,ass便可以向这个文件描述符中任意添写东西了~~
PS:如果将fcntl设置为开启,即设置为1,那么,此文件描述符依然是可以被主进程操作的。
下面将程序执行的结过给大家:
当执行此句fcntl(fd, F_SETFD, 1)
fd = 3fork!
argc = 2 fd = 3
test.txt中的内容为:
ooooooooooooooooooo
当将fcntl(fd, F_SETFD, 1)注释掉或者将 1改为 0时
结果:
fd = 3fork!
argc = 2 fd = 3
test.txt中的内容为:
zzzzzzzzzzzzzzzzzzoooooooooooooooooooooo
转载自:http://blog.163.com/tlost_heaven/blog/static/79246122200910239562451/
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志
- fcntl的close-on-exec标志 http://blog.csdn.net/sunlylorn/article/details/6363727
- close-on-exec的FD_CLOEXEC标志问题
- 关于close-on-exec标志
- 关于close-on-exec标志
- close on exec标志位
- 关于文件描述符的close-on-exec标志位
- fcntl的FD_CLOEXEC标志位与exec族
- 有关Linux文件描述符中的close on exec标志位
- Close on exec by deault
- 关于fd的close on exec(非常重要)
- 关于linux进程间的close-on-exec机制
- 关于linux进程间的close-on-exec机制
- 无线频道的价值何在?
- js和jquery获取父级元素、子级元素、兄弟元素的方法
- Volley 源码解析
- nyoj.35 表达式求值【数据结构】 2015/03/11
- 详解STL中的map和hash_map区别
- fcntl的close-on-exec标志
- 车牌识别功能在全视频车位引导系统中的应用
- select例子
- [周三]app图片上传方案的设计
- iOS 视图切换(UITabBarController,UINavigation,Controller模态窗口)
- redis配置文件redis.conf详细说明
- Hadoop-1.1.2 伪分布式安装与配置
- PHP学习笔记(一)数组
- (Go语言)Go的网络轮询及IO机制