C эквивалент автоматической промывки (сбрасывать стандартный вывод после каждой записи)?
Вопрос
В 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 ().