Ответ 1
Попробуйте setvbuf(stdout, NULL, _IONBF, 0)
. Он изменяет stdout
на небуферизованный (_IONBF
) режим.
В Perl я могу напечатать:
$|++;
и все, что напечатано в STDOUT, будет автоматически fflush() ed.
Существует ли эквивалент в C? Другими словами, можно ли каким-либо образом сказать stdio автоматически fflush stdout после каждого printf(), как он автоматически сбрасывает stderr?
Попробуйте setvbuf(stdout, NULL, _IONBF, 0)
. Он изменяет stdout
на небуферизованный (_IONBF
) режим.
Я этого не делал, но правильный ответ 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.
Посмотрите на setbuf() и setvbuf().