プログラムが分岐するとき、どのように出力バッファをクリアしますか?
質問
FILE * cgiOutに書き込むプログラムがあり、それがストリームに書き込まれた直後に、フォークしてバックグラウンドプロセスを実行する必要があります。問題は、フォークの後、FILE *ストリームが時々フラッシュするようで、重複した出力が得られることです(フォークの後、開いているすべてのファイルが閉じられ、バッファがフラッシュされると思います)。どうすればこれを回避できますか?ライブラリで開かれているマスタープロセスのファイルを閉じたくないのですが、それはソケットまたはパイプだと思います。
解決
あなたの質問を理解したかどうかはわかりませんが、cgiOut
の前にfork()
バッファーが空であることを確認したい場合は、fflush()
の直前にストリームでsetvbuf()
を使用できます。これにより、バッファが強制的にフラッシュされます。
<=>およびフレンドを介してバッファリング設定を変更することにより、バッファリングされていないストリームを使用することが適切な場合があります。この方法では、バッファリングの問題はありません(読むべきではありません)が、それはあなたが望むものではないかもしれません。
他のヒント
所属していません StackOverflow