我在程序A中打开一个文件,它的文件描述符是3.使用后跟一个execve的fork我执行另一个程序B,在那里我立即打开另一个程序文件。这个文件描述符是4.如果A和B没有共享文件描述符表,那么在B中打开的文件的文件描述符应该是3.我需要创建不共享父级地址空间的子进程,包括打开的文件。不希望父进程和子进程共享同一个文件描述符表
非常感谢
我在程序A中打开一个文件,它的文件描述符是3.使用后跟一个execve的fork我执行另一个程序B,在那里我立即打开另一个程序文件。这个文件描述符是4.如果A和B没有共享文件描述符表,那么在B中打开的文件的文件描述符应该是3.我需要创建不共享父级地址空间的子进程,包括打开的文件。不希望父进程和子进程共享同一个文件描述符表
非常感谢
孩子不共享相同的FD表,你只是忘了关闭它们在儿童或近距离上EXEC将它们标记。
在exec
之前关闭新文件。在fork()
和exec()
之间的代码中执行此操作。
谢谢。但是有没有一种方法可以在文件复制到新流程创建之前自动关闭文件。 – 2011-05-06 04:54:58
两个答案都是正确的。我选择另一个,因为它给了我两个选择。非常感谢 – 2011-05-06 04:56:04
@ lgnacio谢谢。但是有没有一种方法可以在文件复制到新流程创建之前自动关闭文件。 – 2011-05-06 04:54:36
将它们标记为可执行。 http://stackoverflow.com/questions/1643304/how-to-set-close-on-exec-by-default/1644590#1644590 – 2011-05-06 04:59:15