每个分叉进程的不同输入/输出流

时间:2011-02-17 15:36:46

标签: c fork popen stdio

我有一些代码,其中通过分叉创建了几个进程。每个进程都有popen()函数来执行一些shell命令。问题是所有这些进程都使用相同的输入/输出流。这种情况发生时,由于进程同时写入一个流而发生冲突。

有没有办法解决这个问题,所以每个分叉进程都使用它自己的流? 在我的情况下,不允许做任何分叉。

2 个答案:

答案 0 :(得分:2)

你必须关闭并重新打开stdin和stdout,如果可能的话,在fork之后,在子进程中。

答案 1 :(得分:1)

当您调用fork()时,您从父进程继承文件描述符(stdin,stdout等)。当你popen它将采取共享stdin / stdout并将其传递到popened进程。听起来你想要在分叉后关闭任何打开的文件描述符,然后重新打开它们。