像这样:
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...
虽然我读过man fcntl
,但我无法弄清楚它是做什么的。
答案 0 :(得分:65)
它为文件描述符设置 close-on-exec 标志,这会导致文件描述符在任何exec
- 族函数成功时自动(并原子地)关闭
它还测试返回值以查看操作是否失败,如果文件描述符有效则无用,因为在有效文件描述符上没有此操作失败的条件。
答案 1 :(得分:27)
它标记文件描述符,以便当进程或close()
调用fork()
函数系列之一的任何子进程时,它将自动exec*()
。这对于防止文件描述符泄漏到由例如运行的随机程序是有用的。 system()
。