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

只谈情不闲聊 提交于 2019-12-28 16:31:27

问题


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?


回答1:


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




回答2:


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.



回答3:


Take a look at setbuf() and setvbuf().



来源:https://stackoverflow.com/questions/214271/c-equivalent-of-autoflush-flush-stdout-after-each-write

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!