1

UNIX の C プログラム内でシェルの動作をシミュレートする必要がありますが、1 つの重要なことを念頭に置いてください。親プロセスがすべてのコマンドを受け取り、子プロセスに送信するということです。次に、子は受信したコマンドを実行し、出力を親に送信します。アイデアは、親とプライマリの子 fork() からコマンドを受け取って、自分の子がコマンドを実行し、出力を fifo パイプに送信できるようにすることです。問題は、(正しい出力を出力する) while ループを中断できないことです。

mkfifo("output",S_IFIFO|0644);
while(read(fifod2,&c,1))
      printf("%c",c);

fifo が可変サイズであることは認識していますが、2 番目の子は終了時に EOF を送信したに違いないため、読み取りが到達すると 0 が返されます。しかし、それは起こらないようです。必要に応じて、コードの一部を追加してください。ありがとうございました

4

1 に答える 1

0

親が fifo の最後を で開いたので、O_RDWR常に fifo への書き込み可能なファイル記述子を持つプロセスがあります。EOF は、FIFO への書き込み可能な fd がない場合にのみ発生します。そのため、親プロセスはそのような書き込み可能な fd を開いたままにしているため、EOF を取得することはありません。

O_RDONLY代わりに親で開いてみてください。

于 2012-10-21T12:15:30.963 に答える