Подтвердить что ты не робот

C эквивалент autoflush (flush stdout после каждой записи)?

В Perl я могу напечатать:

$|++;

и все, что напечатано в STDOUT, будет автоматически fflush() ed.

Существует ли эквивалент в C? Другими словами, можно ли каким-либо образом сказать stdio автоматически fflush stdout после каждого printf(), как он автоматически сбрасывает stderr?

4b9b3361

Ответ 1

Попробуйте setvbuf(stdout, NULL, _IONBF, 0). Он изменяет stdout на небуферизованный (_IONBF) режим.

Ответ 2

Я этого не делал, но правильный ответ IOLBF был бы правильным.

$man setvbuf
...
NAME
setvbuf - назначить буферизацию потоку

СИНТАКСИС
#include < stdio.h >

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

ОПИСАНИЕ
Функция 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.

Ответ 3

Посмотрите на setbuf() и setvbuf().