フォーマット文字列に改行が含まれていないと、printf は呼び出し後にフラッシュしないのはなぜですか? 質問する

フォーマット文字列に改行が含まれていないと、printf は呼び出し後にフラッシュしないのはなぜですか? 質問する

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); 
    

おすすめ記事