1

そのため、現在、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);
}
}
4

0 に答える 0