printf
フォーマット文字列に改行が含まれていないと、呼び出し後にフラッシュしないのはなぜですか? これは POSIX の動作ですか?printf
毎回すぐにフラッシュするにはどうすればよいでしょうか?
ベストアンサー1
ストリームstdout
はデフォルトで行バッファリングされるため、改行に到達した後 (または指示された場合) にのみバッファ内の内容が表示されます。すぐに印刷するには、いくつかのオプションがあります。
stderr
代わりにfprintf
(を使用して印刷するstderr
とデフォルトではバッファなし):fprintf(stderr, "I will be printed immediately");
stdout
必要なときにいつでもフラッシュして使用できますfflush
。printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer
次を使用して stdout のバッファリングを無効にします
setbuf
:setbuf(stdout, NULL);
または、より柔軟な
setvbuf
:setvbuf(stdout, NULL, _IONBF, 0);