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
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