5

なぜ使う必要があるのか​​、使わないのかわかりfflush()ません。

私のプログラムは現在セグフォールトしていて、printステートメントでデバッグしています。プログラムがsegfaultを実行すると、stdoutそのバッファは自動的にフラッシュされませんか?

4

3 に答える 3

9

fflush()を使用する必要がある場合と使用しない場合がある理由がわかりません。

stdioバッファがフラッシュされることもあれば、フラッシュされないこともあります。たとえば、印刷物に「\ n」を含めるだけで、通常はフラッシュされます(stdout端末に接続すると、デフォルトでラインバッファリングされるため)。

プログラムがsegfaultを実行すると、stdoutはそのバッファを自動的にフラッシュしませんか?

Stdioバッファはによってフラッシュされexitます。シグナル(などSIGSEGV)がプロセスを強制終了する場合、exitは呼び出されません。バッファをフラッシュせずにプロセスを終了する別の方法stdioは、Unix固有の呼び出しを使用すること_exitです。

于 2011-11-29T19:10:44.117 に答える
1

いいえ、なぜそうすべきですか。プログラムはオペレーティングシステムによって強制終了されます。セグメンテーション違反が発生した場合、プログラムは意味のある状態ではなくなるため、その時点で安全に実行できるのは、即時終了以外のことはありません。

(そして、誰ものシグナルハンドラーを登録しようとしないでくださいSIGSEGV。)

于 2011-11-29T19:08:00.937 に答える
0

「このコードでfflush(stdout)が呼び出される理由がわかりません。この行にコメントしようとすると、動作はまったく同じでした。」

その出力が改行で終わっていない場合、前のprintf()出力が表示されることが保証されていないためです。

基本的に、改行なしでプロンプトを表示している場合にのみ必要であり、ユーザーがそれを表示できるようにする必要があります。

このサイトを参照してください。

于 2011-11-29T19:07:59.703 に答える