0

C で 2 つのプログラムを作成しました。プログラム A は FIFO への出力を生成し、プログラム B は FIFO からの出力を読み取り、それに応じて処理することを決定します。プログラム A では、stdout を FIFO にリダイレクトして、すべての printf メソッドが出力を FIFO にスローするようにしました。

プログラム B では、FIFO を (読み取りモードで) 開き、プロセス A の出力を fgets() で 1 行ずつ読み取り始めます。ここで問題が発生します。これは、期待した動作が得られないためです。

プロセスAがFIFOに行を出力するとすぐに、プロセスBはそれを即座に取得する必要があると予想していましたが(プロセスAで起こっていることのライブ更新のように)、FIFOのコンテンツがプロセスBで読み取られるまではプロセスAはFIFO接続を閉じます。そのため、プロセスAが何かをFIFOに出力するとすぐにデータを取得するのではなく、大量にデータを取得します。

FIFO のデフォルトの動作 (つまり、書き込み終了時に接続が閉じられたときにデータが一括で読み取られる) であるかどうかを知りたいですか?

現時点でコードがあればいいのですが、自宅のコンピューターから投稿しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

私の質問へのコメントでアドバイスされているように、私はプログラム A で fflush を使用し、問題を解決しました。上記のすべてに感謝します。

于 2013-03-15T16:29:33.380 に答える