FD_CLOEXEC fcntl()标志是做什么的?

像这样:

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

虽然我读过man fcntl ,但是我弄不清楚它的function。

它为文件描述符设置close-on-exec标志,当任何exec系列函数成功时,这将导致文件描述符自动(和primefaces地)closures。

它还会testing返回值以查看操作是否失败,如果文件描述符有效,则这是无用的,因为在有效的文件描述符中没有该操作应该失败的条件。

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

如果有任何其他进程执行您打开的文件(您的fd所指的文件),它将允许操作系统自动closures文件描述符 。 当你编写任何脚本和multithreading编程环境时,这是更有用的。