C эквивалент автоматической промывки (сбрасывать стандартный вывод после каждой записи)?

StackOverflow https://stackoverflow.com/questions/214271

  •  03-07-2019
  •  | 
  •  

Вопрос

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

$|++;

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

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

Это было полезно?

Решение

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

Другие советы

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

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

КРАТКИЙ ОБЗОР
#включить <stdio.h>

   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 ().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top