printf除非换行符在格式字符串中,否则为什么在调用后不刷新?这是 POSIX 行为吗?我怎么可能printf每次都立即冲水?
printf
默认情况下stdout,流是行缓冲的,因此只会在到达换行符后(或被告知时)显示缓冲区中的内容。您有几个选项可以立即打印:
stdout
使用打印stderr代替fprintf(默认情况下stderr是无缓冲的):
stderr
fprintf
fprintf(stderr, "I will be printed immediately");
需要时冲洗stdout以使用fflush:
fflush
printf("Buffered, will be flushed");
fflush(stdout); // Will now print everything in the stdout buffer
使用以下命令禁用标准输出上的缓冲setbuf:
setbuf
setbuf(stdout, NULL);
或者使用更灵活的setvbuf:
setvbuf
setvbuf(stdout, NULL, _IONBF, 0);