1
親プロセスに2つの子プロセスがあり、各子プロセスにそれぞれの子プロセスがある場合、親プロセスはどのように子プロセスのパイプに書き込むことができますか?プロセスが特定の子のIDを指定できる関数を呼び出す方法はありますか?子プロセスにデータを送信する
親プロセスに2つの子プロセスがあり、各子プロセスにそれぞれの子プロセスがある場合、親プロセスはどのように子プロセスのパイプに書き込むことができますか?プロセスが特定の子のIDを指定できる関数を呼び出す方法はありますか?子プロセスにデータを送信する
フォークする前に、パイプ(fdペア)を作成します。
int pipe_fds[2];
if(0>pipe(pipe_fds[2])) /*handle err.*/;
fork
、その後、親プロセスは読み終わりを閉じてpid_to_pipe
テーブルにパイプの書き込み終了を保存しています
if(0>(pid = fork())) /*handle err.*/;
if(pid){ //parent
if(0>save_pid_to_pipe(pid, pipe_fds[1])) /*handle err.*/;
close(pipe_fds[0]);
}
子供が最新の書き込み終了を終了する必要がありますパイプ:
close(pipe_fds[0]);
とすべての書き込みは、親のルックアップテーブルで終わります。 その後、pipe_fds[0];
(子が作成された時点での最新の読み取り終了であった読み取り終了)の命令を待つことができ、親はルックアップテーブルを介して対応する書き込み終了をpidで選択できます。
ルックアップテーブルの単純な配列、ソートされた配列、マップ、またはハッシュを使用できます。
いいえ、あなたは自分でfdペア(パイプ)とpidを結合する必要があります。 (そして、各プロセスは、使用しないパイプファイル記述子をすべて閉じるべきであることを忘れないでください。そうしないと、必要な場所でEOFが得られません)。 – PSkocik
私はあなたの意見を完全に得ていますが、私はまだpidとfd-pairを結合することについて混乱しています。あなたはどうやってそれをしますか?私がしていることは、子プロセスを作成し、if-elseステートメントを使用してfork()の出力をチェックし、親がある場合は別の子プロセスを作成し、同じif-elseステートメントを繰り返します。親プロセスであれば、サーバーからメッセージを受け取ります。 私がここでやりたいことは、いくつかの基本的な条件に基づいて、親プロセスで受け取ったメッセージを子プロセスに送信したいということです。 – zimmer