我在Linux中打开文件时应该何时使用O_CLOEXEC?

Bus*_*ush 19 c linux file-io exec

我的过程分叉了几次,每次孩子都会执行 - 意味着我希望它能运行其他程序.

在主进程中,我使用open()syscall 打开文件描述符.

给它一个标志是否正确,O_CLOEXEC以便我运行的新程序exec()不具有fd资源?

小智 18

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

  • 一个旧的(但容易出错)的做法是`for(int = 3; i <256; i ++)close(i);`就在`execve`之前,只留下stdin,stdout,stderr .... (6认同)