像这样:
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...
Run Code Online (Sandbox Code Playgroud)
虽然我读过man fcntl
,但我无法弄清楚它的作用.
R..*_*R.. 70
它为文件描述符设置close-on-exec标志,这导致文件描述符在任何exec
-family函数成功时自动(并原子地)关闭.
它还测试返回值以查看操作是否失败,如果文件描述符有效则无用,因为在有效文件描述符上没有此操作失败的条件.
gee*_*aur 30
它标记文件描述符,以便close()
在进程或其fork()
调用exec*()
函数系列之一的任何子进程时自动进行.这有助于防止文件描述符泄露到例如运行的随机程序system()
.