在unix环境高级编程第十二章第五个程序里看到这样一句: val |= fd_cloexec 其中fd_cloexec 已经在fcntl.h里被定义为1 #define fd_cloexec 1 那在这里这样写还有什么用呢? 不管前面val取到的值是什么,这样运算下来,肯定是1 那为什么不直接写 val = 1呢? 谢谢
by welcome008 - C/C++ - 2007-12-27 23:52:48 阅读(1935) 回复(9)
本人在做Linux到windows平台移植,windows下没有fcntl函数,请问有没有类似的WIN API能够对文件描述符进行设置? 移植的地方需要设置fd的属性为fd_cloexec,windows下该如何处理?
通过fcntl设置fd_cloexec标志有什么用?
在下面的程序中设了这个标志还是没什么用,在子进程中还是可以访问fd.
#include
书上说“当子进程exec一个新的程序时,调用进程中打开的文件描述符仍然保持打开,但设置了执行即关fd_cloexec的文件描述字除外。如果该标志设置,则描述字在exec时将被关闭。否则该描述字在exec后仍保持打开。” 这句话是不是这样理解的:调用进程是指调用exec的那个子进程,如果在子进程中的某个文件描述字该标志设为了1,则子进程exec后该文件描述字就被关闭?否则就仍为打开???可是exec后子进程不就退出了吗???还有什么文...
# Redirecting only stderr to a pipe. exec 3>&1 # Save current "value" of stdout. ls -l 2>&1 >&3 3>&- | grep bad 3>&- # Close fd 3 for 'grep' (but not 'ls'). exec 3>&- # Now close it for the remainder of the script. 关于 10个fd 这里 和exec之间的操作 谁能发个 文章 一般 只看...
比较新的系统都提供名为/dev/fd的目录,其目录项是名为0、1、2等的文件。打开文件/dev/fd/n等效于复制描述符n(假定描述符n是打开的)。 在函数中调用: fd=open("/dev/fd/0",mode); 大多数系统忽略所指定的mode,而另外一些则要求mode是所涉及的文件(在这里则是标准输入)原先打开时所使用的mode的子集。因为上面的打开等效于: fd=dup(0); 描述符0和fd共享同一文件表项(见图3-3)。例如,若描述符0被只读打开,那么我们也只对...
我不想用文件来操作,只想通过一个fd来操作! 主要目的就是,用自己的成功信息代替cmd的信息。 然后输出cmd的一堆的错误信息! cmd > /dev/null 2>&6 if [ $? -eq 0 ]; then echo "successfully!" else 6>&1 fi 但是这样出错。
lr-x------ 1 zc zc 64 Feb 3 00:13 0 ->; /dev/null l-wx------ 1 zc zc 64 Feb 3 00:13 1 ->; /home/zc/.xsession-errors lrwx------ 1 zc zc 64 Feb 3 00:13 10 ->; socket:[172144] l-wx------ 1 zc zc 64 Feb 3 00:13 2 ->; /home/zc/.xsession-errors lrwx------ 1 zc zc 64 Feb 3 00:13 3 ->; socket:[323...