0

fork() および wait() システム コールを使用して、Unix で基本的な C++ プログラムを作成しました。私は子供を1人だけ作成しています。パイプは2本使いました。したがって、最初のパイプでフォーク操作を行った後、子から親に書き込み、親がデータを受信した後、親は 2 番目のパイプで子に書き戻します。その後、親側でwait(0)システムコールを使用しています。しかし、それでも私の親プロセスは子プロセスの前に死ぬのですか?

構造は次のようなものです。

 main()
 char buff[] = "Parent process kills";
 char cuff[] = "before Child process";
 int fd1[2];
 int fd2[2];
 pipe(fd1);
 pipe(fd2);
 if((pid = fork()) == 0)
 {
   close(fd1[0]);
   close(fd2[1]);
   write(fd1[1],buff,strlen(buff)+1);
   read(fd2[0],cuff,sizeof(cuff));

 }
 else
 {
    close(fd1[1]);
    close(fd2[0]);

    read(fd1[0],buff,sizeof(buff));
    write(fd2[1],cuff,strlen(cuff)+1);
    wait((int *) 0);
  }

  close(fd1);
  close(fd2);

  }'

wait() が使用されていても、親プロセスは子の前に終了します。事前に感謝します。

4

3 に答える 3

0

呼び出しreadにより、未定義の動作が発生します。あなたが持っているバッファではなく、文字列リテラルを読み込もうとします。この場合、クラッシュにつながる可能性があります。

あなたのwrite呼び出しは、あなたが持っているバッファではなく、文字列リテラルも書き込みます。

また、文字列に初期化された文字配列がsizeo(buff)ありstrlen(buff) + 1、等しいためです。

于 2013-06-30T14:25:57.320 に答える