Я пытаюсь изучить API libuv
и написал следующий тест:
#include <stdio.h>
#include <stdlib.h>
#include <uv.h>
void timer_cb(uv_timer_t* timer) {
int* i = timer->data;
--*i;
if(*i == 0) {
uv_timer_stop(timer);
}
printf("timer %d\n", *i);
//fflush(stdout);
}
int main() {
uv_loop_t* loop = uv_default_loop();
uv_timer_t* timer = malloc(sizeof(uv_timer_t));
uv_timer_init(loop, timer);
int i = 5;
timer->data = &i;
uv_timer_start(timer, timer_cb, 1000, 2000);
uv_run(loop, UV_RUN_DEFAULT);
printf("Now quitting.\n");
uv_close(timer, 0);
uv_loop_close(loop);
return 0;
}
При ее запуске выходные данные не отображаются до тех пор, пока программа не завершит работу, а затем все выходные данные отображаются сразу. Если я раскомментирую строку fflush
, она будет работать, как и ожидалось, записывая каждые 2 секунды.
Может кто-нибудь объяснить мне это? Почему stdout
не сбрасывается после новой строки, как объясняется здесь и в других местах? Зачем мне нужно вручную сбрасывать его?
stdout
обычно буферизуется строкой, если вывод идет на терминал. Если он идет в файл, он обычно не буферизуется строкой. - person Tom Karzes   schedule 23.06.2016