【发布时间】:2016-10-25 18:11:39
【问题描述】:
我正在尝试学习libuv api并编写了以下测试:
#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 在换行符之后没有刷新,正如here 和其他地方所解释的那样?为什么需要手动冲洗?
【问题讨论】:
-
“为什么 stdout 缓冲” - 为什么不呢?
-
这个答案可能对你有用:stackoverflow.com/a/5229135/868691
-
@AndrewHenle Windows,在 msys 上使用 mingw64
-
@Olaf 我了解(请参阅最后链接到的答案)缓冲区刷新换行符
-
@baruch:你在哪里找到标准中的?