1. ホーム
  2. c

[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?

2022-03-16 01:35:54

質問

なぜ printf は、フォーマット文字列に改行がない限り、呼び出し後にフラッシュしないのですか? これはPOSIXの動作でしょうか?どのようにしたら printf は毎回すぐにフラッシュしますか?

どのように解決するのですか?

その 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
    
    
  • 標準出力でのバッファリングを無効にするために setbuf :

    setbuf(stdout, NULL);
    
    
  • または、より柔軟な setvbuf :

    setvbuf(stdout, NULL, _IONBF, 0);