0

フォークによっていくつかのプロセスが作成されるコードがあります。すべてのプロセスには、いくつかのシェル コマンドを実行するための popen() 関数があります。問題は、これらすべてのプロセスが同じ入出力ストリームを使用することです。これにより、複数のプロセスが 1 つのストリームに同時に書き込みを行ったために衝突が発生した場合に状況が発生します。

フォークされたすべてのプロセスが独自のストリームを使用するように、その問題を解決する方法はありますか? 私の場合、フォークで何もすることは許可されていません。

4

2 に答える 2

2

子プロセスで、フォークの前、または可能であればその直後に、stdin と stdout を閉じて再度開く必要があります。

于 2011-02-17T15:55:08.710 に答える
1

fork() を呼び出すと、親プロセスからファイル記述子 (stdin、stdout など) を継承します。popen すると、共有 stdin/stdout が取得され、popen されたプロセスにパイプされます。フォーク後に開いているファイル記述子を閉じて、再度開きたいようです。

于 2011-02-17T15:57:42.977 に答える