Quintin Steiner Quintin Steiner - 1 year ago 86
C Question

How can I print a string with newline without flushing the buffer?

When I do this (note the included



I would like it not to flush the buffer. I would like to manually flush it later.

Is this possible?

This question sort of asks the same thing, but asks about C++ instead of C. I don't see how I could gather how to do this in C by reading the answers to that question (so it's not a duplicate).

Answer Source

As explained in the comments, setvbuf can be used to change the buffering of any file stream, including stdout.

Here is a simple example:

#include <stdio.h>
#include <unistd.h>

int main(void)
    setvbuf(stdout, NULL, _IOFBF, 0);
    printf("hello world\n");

The example uses setvbuf to make stdout fully buffered. Which means it will not immediately output upon encountering a newline. The example will only display the output after the sleep (flush on exit). Without the setvbuf the output will be displayed before the sleep.