在Perl中,我可以输入:
$|++;
打印到STDOUT的任何内容都将自动fflush()编辑。
C中有等价物吗?换句话说,有什么方法可以告诉stdio在每次printf()之后自动刷新stdout,它会自动刷新stderr吗?
答案 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()。