32

在 Perl 中,我可以输入:

$|++;

并且打印到 STDOUT 的任何内容都将自动被 fflush() 处理。

C中是否有等价物?换句话说,有什么方法可以告诉 stdio 在每次 printf() 之后自动刷新 stdout,就像它自动刷新 stderr 的方式一样?

4

3 回答 3

42

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

于 2008-10-18T00:45:41.117 回答
14

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

$ 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.
于 2008-10-18T00:46:06.077 回答
6

看看 setbuf() 和 setvbuf()。

于 2008-10-18T00:43:48.093 回答