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


В Perl я могу ввести:

$|++;

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

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

3 28

3 ответа:

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

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

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

Краткий обзор
#include

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

Описание
функция setvbuf() может быть использована после того, как поток, на который указывает stream, связан с открытым файлом, но до выполнения любой другой операции (кроме неудачного вызова 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.

Взгляните на setbuf () и setvbuf ().