1

パイプを使用して子プロセスから親プロセスにコマンドライン引数を送信しようとしていますが、何が間違っているのかわかりません。私のコードは以下です。どんな助けでも大歓迎です。前もって感謝します。

int main(int argc, char argv[])
   pid_t child;
   int fd[2];

   pipe(fd);
   if((child = fork() == 0)
   {
      int len = strlen(argv[1]);
      close(fd[0];
      write(fd[1], argv[1], len);
      exit(0);
   }
   else //Assuming process won't fail for now
   {
      char src[10]; //Just using 10 for now, no arguments have more than 10 characters
      read(fd[0], src, (strlen(src)));
      fprintf(stderr, "%s\n", src);
      close(fd[0]);
   }
}
4

3 に答える 3

2

小さなエラーがたくさんありましたが、私が見る限り、信じられないかもしれませんが、これが本当の問題かもしれません。

read(fd[0], src, (strlen(src)));

私の推測では、最初の char は null であり、0 バイトを正常に読み取っています。

への変更

  read(fd[0], src, (sizeof(src)));

大規模なプロジェクトでは、必ずループで読み書きしてください。指定した内容の読み取りまたは書き込みが保証されるわけではありません。

于 2013-10-01T20:24:22.890 に答える