各親がパイプを介して 2 つの子に接続されているプロセスのバイナリ ツリーを作成しようとしています。
問題: 親プロセス A が 2 つのプロセス (B と C) と 2 つのパイプ (プロセスごとに 1 つ) を作成します。それらのファイル記述子は fd に格納されます。2 回目の反復で、B は 2 つの子を生成します。B は、fd に格納されているファイル記述子を新しいパイプのファイル記述子で上書きします。n 個のレベルを生成した後、残っているパイプは、親へのリーフ ノード (1 レベル上) だけです。
私はこの理論をテストしましたが、伝達されるのは、ツリーの最下部、リーフから 1 つ上のレベルまでの間だけです。リーフ ノードがツリーのずっと上にあるマスター プロセスと通信できるようにする必要があります。
私はパイプに慣れていないので、説明についてはずれている可能性があります。
私の理解は正しいですか? また、この問題を解決するにはどうすればよいですか?
サンプルコード:
#define READ 0
#define WRITE 1
int fd[2][2];
void
spawnChildren(int levels)
{
if(levels == 0)
return;
pipe(fd[0]);
//spawns 2 children at a single parent
int pid = fork();
//parent
if(pid > 0)
{
close(fd[0][WRITE]);
pipe(fd[1]);
int pid2 = fork();
//child B
if(pid2 == 0)
{
close(fd[1][READ]);
spawnChildren(levels-1);
return;
}
//parent
else
close(fd[1][WRITE]);
}
//child A
else
{
close(fd[0][READ]);
spawnChildren(levels-1);
return;
}
}