Ich versuche, die libuv
api und schrieb den folgenden Test zu lernen:Warum ist Stdout-Pufferung?
#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;
}
Wenn er gestartet wird es wird keine Ausgabe angezeigt, bis das Programm ausgeführt wird beendet, und dann wird die gesamte Ausgabe wird sofort angezeigt. Wenn ich die fflush
Zeile auskommentiere, funktioniert es wie erwartet und schreibt alle 2 Sekunden.
Kann mir bitte jemand das erklären? Warum wird stdout
nicht nach dem Newline gespült, wie es here und an anderen Stellen erklärt wird? Warum muss ich es manuell spülen?
Was ist Ihr Betriebssystem? –
"Warum ist Stdout-Pufferung" - Warum nicht? – Olaf
Diese Antwort könnte nützlich für Sie sein: http://stackoverflow.com/a/5229135/868691 –