Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C equivalent of autoflush (flush stdout after each write)?

Tags:

c

stdio

In Perl, I can type:

$|++; 

and anything printed to STDOUT will be automatically fflush()ed.

Is there an equivalent in C? In other words, is there some way I can tell stdio to automatically fflush stdout after every printf(), the way it automatically flushes stderr?

like image 874
raldi Avatar asked Oct 18 '08 00:10

raldi


2 Answers

Try setvbuf(stdout, NULL, _IONBF, 0). It changes stdout to unbuffered (_IONBF) mode.

like image 76
Harry Avatar answered Sep 20 '22 17:09

Harry


I haven't done this, but _IOLBF would be the right answer.

$ man setvbuf NAME        setvbuf — assign buffering to a stream  SYNOPSIS        #include <stdio.h>         int setvbuf(FILE *restrict stream, char *restrict buf, int type,            size_t size);  DESCRIPTION        The functionality described on this reference page is aligned with        the ISO C standard. Any conflict between the requirements described        here and the ISO C standard is unintentional. This volume of        POSIX.1‐2008 defers to the ISO C standard.         The setvbuf() function may be used after the stream pointed to by        stream is associated with an open file but before any other operation        (other than an unsuccessful call to setvbuf()) is performed on the        stream. The argument type determines how stream shall be buffered, as        follows:          *  {_IOFBF} shall cause input/output to be fully buffered.          *  {_IOLBF} shall cause input/output to be line buffered.          *  {_IONBF} shall cause input/output to be unbuffered. 
like image 31
yogman Avatar answered Sep 21 '22 17:09

yogman