exec是否保留文件描述符

时间:2014-03-07 03:43:57

标签: c unix file-descriptor

这实际上是一个两步问题:

  1. 文件描述符究竟是什么?我认为这是表示打开文件的最基本方式。但由于dup2可以使两个不同的文件描述符指向同一个文件,那么它代表一个唯一的文件是什么?

  2. 如果我在exec之前执行dup2,那么整个程序就会被删除,它是否还有相同的文件描述符表?重定向的文件描述符是否仍然被重定向?

1 个答案:

答案 0 :(得分:16)

即可。通过调用exec保留打开的文件描述符。来自execve man page(所有exec*调用只是此系统调用的包装器):

  

默认情况下,文件描述符在execve()内保持打开状态。标记为close-on-exec的文件描述符将被关闭;请参阅FD_CLOEXECfcntl(2)的说明。

  1. 是的,file descriptor是用户空间在进行系统调用时引用打开文件的方式。 (或套接字或管道等)它们可以复制的事实不会改变它。它们只是对同一个打开文件的多个引用。另见:

  2. 是的,如手册页引用中所述。

  3. 事实上,许多程序(包括你的shell)都依赖于这个功能。如果不是这样,您的程序将在没有打开标准输入/输出/错误文件描述符的情况下启动!当shell运行一个程序时,fork s,dup2打开tty文件描述符为0,1,2,然后execve是你的新程序。