Ausgabe von C Programm erscheint nur unregelmäßig in einer Datei

Cruz

Cruz

No Bullshit
Hallo Leute,

ich habe ein C Programm laufen, das mein System sehr stark auslastet. Es erstellt alle paar Minuten tausende von 128K Binärdateien, öffnet liest beschreibt und schliesst sie alle ein paar hundert mal und löscht sie dann alle wieder. Das klappt auch alles wunderbar.

Gleichzeitig versuche ich den Erfolg des Programms in einer simpelen Textdatei zu loggen. Die Struktur des Programms ist simpel und sieht etwa so aus:

FILE* logfile = fopen(einelogdatei, "a");
while(1)
{
quaele_die_festplatte_bis_sie_verreckt();
system("rm -f *");

fprintf(logfile, "habe gerade %d tausend dateien erstellt und gelöscht", i);
printf("habe gerade %d tausend dateien erstellt und gelöscht", i);
}
fclose(logfile);

Die Ausgabe in die Logdatei hängt schwer hinterher. Ein Durchlauf der while Schleife dauert einige Minuten, sodass es noch nicht mal besonders viele Daten sind. Das Programm ist oft schon hunderte male durchgelaufen und ich kann die Ausgabe auf dem Bildschirm sehen, trotzdem steht keine einzige Zeile in der Logdatei! Und irgendwann erscheinen dann mal schubweise ein bis zwei Hundert Zeilen im Log, wobei man sehen kann, dass die letzte Zeile noch nicht vollständig geschrieben wurde. Das selbe Phänomen habe ich auf 3 unterschiedlichen Distros beobachtet: Ubuntu, SuSE und SystemRescueCD.

Kann mich mal jemand erleuchten, wieso das so ist? Und kann ich irgendwas tun, damit ausnahmsweise mal die Logdatei zuverlässig geschrieben wird? Ich brauche unbedingt die Daten daraus und es dauert manchmal Stunden, bis endlich die ersten paar hundert Zeilen geschrieben werden.

Vielen Dank,
Cruz
 
also wenn es offensichtlich nicht am system liegt... dann gehört das wohl eher in den C++ Programmier Bereich
 
Ist ja auch logisch: Du musst den Stream flushen oder das File schließen.

Gruß,
Lord Kefir
 
Dateien werden erst geschrieben, wenn das System meint, Zeit dazu zu haben. Wenn es gerade sehr beschaeftigt ist, wird das geschriebene erstmal im Hinterkopf (RAM) gehalten, bevor es seinen Weg auf die Platte findet.

fflush(FILE*) ist die Funktion, die Du verwenden solltest, um Lord Kefirs Vorschlag zu folgen.
 
Dateien werden erst geschrieben, wenn das System meint, Zeit dazu zu haben. Wenn es gerade sehr beschaeftigt ist, wird das geschriebene erstmal im Hinterkopf (RAM) gehalten, bevor es seinen Weg auf die Platte findet.

Jedenfalls ist das bei durchdachten Systemen so ;)

Gruß,
Lord Kefir
 
Na, wer denkt denn auch schon an Windows, wenn das Wort 'Betriebsystem' faellt ;-)
 
Zuletzt bearbeitet:

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben