当我在Linux中打开文件时,什么情况下应该使用O_CLOEXEC?

31

我的进程会多次fork,每次子进程都会执行exec-也就是说我希望它运行一些其他的程序。

在主进程中,我使用open()系统调用打开一个文件描述符。

如果我给它标志O_CLOEXEC,那么我使用exec()运行的新程序就不会有fd资源了,这样做是否正确?


参见:man 2 open - milahu
1个回答

25

是的,除非你需要执行程序访问该文件描述符。在调用exec之前,您还可以在子进程中手动关闭文件描述符,但这样更容易出错。


8
一种老旧(但容易出错)的做法是在 execve 之前使用 for (int=3; i<256; i++) close(i);,只保留标准输入、标准输出和标准错误输出。 - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接