1

Cメッセージがコマンドで出力されるプログラムがありますprintf。バッチファイルからプログラムを呼び出します

call myProgram.exe parms > myFile.txt

メッセージを印刷するmyFileたびに(またはほぼ毎回)更新する必要があります。myProgram現在、プログラムが実行を終了するまでファイル内に何も表示されません。おそらくバッファリングが原因です。このバッファリングの問題は、自分のCプログラム、batch fileまたはオペレーティング システムによるものですか?どうすれば解決できますか?

4

1 に答える 1

1

stdio.h関数はバッファリング中です。setvbufを参照してください。バッファリングはオペレーティング システム固有のものである可能性があり、リダイレクト時に変更される可能性があります (たとえば、内部的にisatty(3)が内部で使用される可能性があるためprintfなど...)。

このバッファリングは実際に有用であり、一般に出力が大幅に高速化されることに注意してください。

最も簡単な方法は、時々fflush(3)を呼び出すことです。setvbufそれ以外の場合は_IOFBFon で呼び出しますstdout

setvbufプログラムの開始近くで使用する方が簡単です。ただし、適切な場所fflushで呼び出す方が効率的である可能性があります (より大きなバッファーを使用すると高速になるため)。

于 2013-09-04T11:06:57.723 に答える