C相当于autoflush(每次写入后刷新stdout)?

时间:2008-10-18 00:36:58

标签: c stdio

在Perl中,我可以输入:

$|++;

打印到STDOUT的任何内容都将自动fflush()编辑。

C中有等价物吗?换句话说,有什么方法可以告诉stdio在每次printf()之后自动刷新stdout,它会自动刷新stderr吗?

3 个答案:

答案 0 :(得分:39)

试试setvbuf(stdout, NULL, _IONBF, 0)。它将stdout更改为无缓冲(_IONBF)模式。

答案 1 :(得分:14)

我没有这样做,但_IOLBF将是正确的答案。

$ man setvbuf
...
NAME
setvbuf - 为流分配缓冲

概要
#include< stdio.h>

   int setvbuf(FILE *restrict stream, char *restrict buf, int type,
          size_t size);

说明
在stream指向的流与打开的文件关联之后但在执行任何其他操作(除了对setvbuf()的不成功调用之外)之前,可以使用setvbuf()函数。        流。参数类型确定如何缓冲流,如下所示:

    * {_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.

答案 2 :(得分:6)

看看setbuf()和setvbuf()。