c - 为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?

标签 c printf flush

为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?这是 POSIX 行为吗?我怎样才能让 printf 每次都立即刷新?

最佳答案

stdout 流默认是行缓冲的,因此只会在到达换行符(或被告知时)后显示缓冲区中的内容。您有几个选项可以立即打印:

  • 使用 fprintf 打印到 stderr(stderrunbuffered by default ):

    fprintf(stderr, "I will be printed immediately");
    
  • 每当需要时使用fflush刷新stdout:

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

关于c - 为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54836322/

相关文章:

c - 当我们在 c linux 中编写 socket(family, type, protocol) 时,内部到底发生了什么?

linux - Shell GNU-Screen -X Stuff 问题

c - 如何填充 printf 以考虑负号和可变长度数字?

DB2 事务日志已满。如何冲洗/清除它?

java - 我创建了一个带有自动刷新功能的 PrintWriter;为什么它不自动冲洗?

java - 刷新 header 后,在 Java 中的响应中添加 cookie?

c - 预期为 ‘struct matrix_t *’ 但参数的类型为 ‘struct matrix_t *’ ?_?没有不同

c - C中纠结的句法位

c# - 64位VMWare检测代码触发断点

Java:printf 语句中的文字百分号