printf in while schleife, sofortige ausgabe
-
Hallo zusammen,
ich habe ein Programm geschrieben, welches unter Unix ein Verzeichnis mit MP3 Dateien einliest und diese scannt (sprich Bitrate, Samples Laufzeit Frameanz. etc. ermittelt)
nun möchte ich dem Anwender darüber aber direkt informieren, was es gefunden hat und so weiter..Das ganze läuft so ab, das ich den Inhalt des Verzeichnis auslese, in einer while schleife, habe ich eine MP3, lade ich diese Byte weise ein um die Frames zu zählen und den Header zu analysieren, genau da will ich ja immer eine printf ausgabe machen, nur die ausgaben erscheinen erst, wenn das Prog fertig ist, es soll aber sofort geschehen, ich dachte ich könnte es mit sleep(x) machen, geht aber nicht, unter windows verarbeite ich einfach die Messageschleife und funktioniert, nur bei Unix bin ich da rat los, wie ich es direkt ausgeben kann.
/*pseudeo Code*/ while (file=readdir) { if (isMP3) { FILE* mp3datei = fopen(...); while (!feof(mp3datei) { fgetc(..); /*habe ich Header daten*/ printf("header"); /* dieses printf soll sofort ausgegeben werden, bevor ich weiter durch die MP3 Datei gehe und die Frames Zähle wegen Laufzeit*/ } } }
-
Das liegt daran, dass die Ausgabe gebuffert ist. Wenn du zu wenig in den Buffer oder kein \n reinschreibst, wird der erst am Ende des Programmes geleert. In dem Fall musst du mit
fflush(stdout);
den Buffer explizit leeren.
-
Danke, funktioniert jetzt, da coded man was komplexes und scheiter an einem \n für Printf, ich glaub ich werde alt