-1
// Some initialization
// Child process
// stdin is redirected to fd[0]
while (fgets(someCharArray, sizeof(someCharArray), stdin) {
printf("%s\n", someCharArray);
}
// Parent process
char greeting[50] = "hello\n\0";
write(fd[1], greeting, sizeof(greeting));
close(fd[1]);
私はこれらのパイプに本当にうんざりしています。 fgets
は、改行まで読み込む必要があります。これは "hello"を読み込んで正常に印刷します。しかし、プロセスは終了しません。私は親のパイプの書き込み終了を閉じました。したがって、0またはEOF
を返し、whileループを終了する必要があります。パイプを使用しているwhile(read)ループが終了しないのはなぜですか?
改行文字とヌルターミネータの有無にかかわらず、「hello」のさまざまな組み合わせを試しました。私は本当に問題が何かを見ていない。
後に子プロセスで
fd[1]
を閉じる必要がありますあなたの場合は [1]? – jdarthenay[完全で検証可能な最小限の例]を表示してください(http://stackoverflow.com/help/mcve)。おそらくあなたはすべての右のfdを閉じるわけではありません。だから完全なコードを見る必要があります。 – kaylum
@jdarthenay私はこれについて不明です。子プロセスは実際に別のソースファイルを実行しました。したがって、 'fd'はありません。私はwhileループの前に 'stdout'を' close 'しようとしましたが、それは意味をなさないでしょう。これは、メインプログラムの 'fd'を子供に渡す必要があることを意味しますか? – ludluck