そのため、現在、parse->sort->suppress という 3 つのプロセスを実行するプログラムを作成しています。'Parse' は 'sort' の親であり、'sort' は 'suppress' の親です。ソートのコードがわかりません。私が知っているのは、標準の I/O ファイル記述子を使用していることだけです。何らかの理由で、「抑制」は常にEOF文字を取得するため、EOF文字を受信する前に取得するはずのデータをソート処理せずにプログラムを終了することはありません。
私のプログラムの内部動作を回避する (コメントアウト) ここでは、パイプをどのように設定するかを示します。
'sort' から 'suppress' へのパイプが、パイプのセットアップのために時期尚早に EOF を送信している理由はありますか?
int main(int argc, char *argv[])
{
int status1;
int ps_id[2];
//setup parse->sort pipe
if (pipe(ps_id) == -1)
{
perror("ps pipe: ");
exit(EXIT_FAILURE);
}
//sort&suppress
if (!fork())
{
int status2;
int ss_id[2];
//setup sort->suppress pipe
if (pipe(ss_id) == -1)
{
perror("ss pipe: ");
exit(EXIT_FAILURE);
}
//suppress
if (!fork())
{
close(ps_id[0]);
close(ps_id[1]);
close(ss_id[1]);
//do stuff
close(ss_id[0]);
}
//suppress
else
{
close(ps_id[1]);
close(ss_id[0]);
dup2(ps_id[0], 0);
dup2(ss_id[1], 1);
close(ps_id[0]);
close(ss_id[1]);
excel("/bin/sort", "sort", (char*)0);
wait(&status2);
}
}
//parse
else
{
close(ps_id[0]);
//do stuff
close(ps_id[1]);
wait(&status1);
}
}