//child process
char buf[20];
read(fd[0][0], buf, 20);
printf("%s", buf);
//parent process
write(fd[0][1], "12", 20);
write(fd[0][1], "14", 20);
write(fd[0][1], "15", 20);
--output--
12
//then the program just exit. It cannot print out 14 and 15.
この問題を解決するにはどうすればよいでしょうか?子プロセスが実際にパイプからデータを読み取るまで待つことができますか?C:pipe同じパイプに複数回データを書き込む方法は?
私のプログラムを編集しました。また、すべてのデータを読み取ることができます。しかし、プログラムはただ停止します。処理を続行できません。私はそれが子プロセスで止まると思います。
//child process
buf[6];
int i;
while ((i = read(fd[0][0], buf, 6)) > 0) {
printf("%s", buf);
}
//parent process
write(fd[0][1], "12", 2);
write(fd[0][1], "14", 2);
write(fd[0][1], "15", 2);
printf("done!\n");
--output--
121415done
//The program just stopped in child process.
あなたの親プロセスが書き込みされる20バイト3回:あなたが欲しいのバイト数を取得することを確認するには、ループ内で
read
を使用する必要があるだろう2つの文字、ヌルバイト、および17ゴミバイト。子は最初の20バイトだけを読み込みます。 –なぜあなたはwrite(fd、 "12"、20)を呼び出すのでしょうか?3つの文字を送信しているので、write(fd、 "12"、3)そして、20バイトを送信すると、この20バイトを受け取って "12"を出力します。もう一度お読みになりますか?残りのメッセージを受け取るには? – rbelli
いいえ、私は子プロセスで一度だけreadを呼び出しました。子供がすべてのメッセージを読むことができるようにするにはどうすればよいですか? –