プログラムが分岐するとき、どのように出力バッファをクリアしますか?

StackOverflow https://stackoverflow.com/questions/343035

  •  19-08-2019
  •  | 
  •  

質問

FILE * cgiOutに書き込むプログラムがあり、それがストリームに書き込まれた直後に、フォークしてバックグラウンドプロセスを実行する必要があります。問題は、フォークの後、FILE *ストリームが時々フラッシュするようで、重複した出力が得られることです(フォークの後、開いているすべてのファイルが閉じられ、バッファがフラッシュされると思います)。どうすればこれを回避できますか?ライブラリで開かれているマスタープロセスのファイルを閉じたくないのですが、それはソケットまたはパイプだと思います。

役に立ちましたか?

解決

あなたの質問を理解したかどうかはわかりませんが、cgiOutの前にfork()バッファーが空であることを確認したい場合は、fflush()の直前にストリームでsetvbuf()を使用できます。これにより、バッファが強制的にフラッシュされます。

<=>およびフレンドを介してバッファリング設定を変更することにより、バッファリングされていないストリームを使用することが適切な場合があります。この方法では、バッファリングの問題はありません(読むべきではありません)が、それはあなたが望むものではないかもしれません。

他のヒント

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top