C эквивалентно автозапуску (сбросить stdout после каждой записи)? - PullRequest
29 голосов
/ 18 октября 2008

В Perl я могу набрать:

$|++;

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

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

Ответы [ 3 ]

39 голосов
/ 18 октября 2008

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

14 голосов
/ 18 октября 2008

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

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

СИНТАКСИС
#include

   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.
6 голосов
/ 18 октября 2008

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

...