Why does printf
not flush after the call unless a newline is in the format string? Is this POSIX behavior? How might I have printf
immediately flush every time?
10 s
The stdout
stream is line buffered by default, so will only display what’s in the buffer after it reaches a newline (or when it’s told to). You have a few options to print immediately:
-
Print to
stderr
instead usingfprintf
(stderr
is unbuffered by default):fprintf(stderr, "I will be printed immediately");
-
Flush
stdout
whenever you need it to usingfflush
:printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer
-
Disable buffering on stdout by using
setbuf
:setbuf(stdout, NULL);
-
Or use the more flexible
setvbuf
:setvbuf(stdout, NULL, _IONBF, 0);