Xuf*_*eng 17 c unix file-descriptor
这实际上是一个两步问题:
究竟什么是文件描述符?我认为这是表示打开文件的最基本方式.但是由于dup2可以使两个不同的文件描述符指向同一个文件,那么它代表一个唯一文件是什么?
如果我在exec之前执行dup2,那么整个程序就会被删除,它是否还有相同的文件描述符表?重定向的文件描述符是否仍然被重定向?
Jon*_*art 18
是的.通过调用保留打开的文件描述符exec.从execve手册页(所有exec*调用只是这个系统调用的包装):
默认情况下,文件描述符保持打开状态
execve().标记为close-on-exec的文件描述符将被关闭; 看到FD_CLOEXECin 的描述fcntl(2).
是的,文件描述符是用户空间在进行系统调用时引用打开文件的方式.(或套接字或管道等)它们可以复制的事实不会改变它.它们只是对同一个打开文件的多个引用.也可以看看:
是的,如手册页引用中所述.
事实上,许多程序(包括你的shell)都依赖于这个功能.如果不是这样,您的程序将在没有打开标准输入/输出/错误文件描述符的情况下启动!当shell运行程序时,它fork是dup2打开的tty文件描述符到0,1,2,然后execve是你的新程序.