The C Standard IO streams are operating in one of three modes:
- fully buffered
- line buffered
- unbuffered
You can set the mode with the setvbuf() function. This all happens deep in the guts of the Standard IO implementation. If you want your data to appear immediately, use unbuffered mode.
Quoting from C99 7.19.3#3:
When a stream is unbuffered, characters are intended to appear from the
source or at the destination as soon as possible. Otherwise characters may be
accumulated and transmitted to or from the host environment as a block. When a
stream is fully buffered, characters are intended to be transmitted to or from
the host environment as a block when a buffer is filled. When a stream is line
buffered, characters are intended to be transmitted to or from the host
environment as a block when a new-line character is encountered. Furthermore,
characters are intended to be transmitted as a block to the host environment
when a buffer is filled, when input is requested on an unbuffered stream, or
when input is requested on a line buffered stream that requires the transmission
of characters from the host environment. Support for these characteristics is
implementation-defined, and may be affected via thesetbuf
andsetvbuf
functions.