【发布时间】:2018-01-05 08:39:10
【问题描述】:
我刚刚读到这个:
What does the FD_CLOEXEC fcntl() flag do?
我了解FD_CLOEXEC 的作用,但不知道为什么它很重要。为什么不在exec()ing 之前关闭所有相关的文件描述符?为什么设置FD_CLOEXEC 如此重要以至于可以设置一个特殊的O_CLOEXEC 开放模式标志(在Linux 2.6.something 及更高版本上),只是为了避免一点线程间同步?
【问题讨论】:
-
因为(例如)在编写代码的 exec 部分时,您可能不知道当前使用的每个文件描述符?
-
@Jean-BaptisteYunès:操作系统提供这些功能仅仅是因为进程不必费心控制它们的线程?我不知道,不知何故听起来没有说服力。
-
这与线程无关,只是进程管理。文件描述符是通过exec继承的,你可能在打开文件的时候不需要它,所以使用
FD_CLOEXEC不要把负担放在谁编写代码的执行部分。 -
@Jean-BaptisteYunès:所以只需关闭所有您不信任的文件描述符以保持打开状态。
-
再一次,为什么你认为你总是知道在你试图执行的时候分配了哪些描述符?