FD_CLOEXEC fcntl()标志有什么作用?

时间:2011-05-25 13:18:17

标签: c

像这样:

if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...

虽然我读过man fcntl,但我无法弄清楚它是做什么的。

2 个答案:

答案 0 :(得分:65)

它为文件描述符设置 close-on-exec 标志,这会导致文件描述符在任何exec - 族函数成功时自动(并原子地)关闭

它还测试返回值以查看操作是否失败,如果文件描述符有效则无用,因为在有效文件描述符上没有此操作失败的条件。

答案 1 :(得分:27)

它标记文件描述符,以便当进程或close()调用fork()函数系列之一的任何子进程时,它将自动exec*()。这对于防止文件描述符泄漏到由例如运行的随机程序是有用的。 system()