fputs & Absturz->komisch



  • Mal eine Frage...
    Ich gebe mit meinem Programm in einer Funktion Debug Meldungen in eine Textdatei aus.
    In dieser Funktion wird die Textdatei geöffnet, eine neue Zeile geschrieben (mit fputs)
    und wieder geschlossen.
    Das funktioniert auch so weit. Nur wenn das Programm abstürzt, steht plötzlich
    nichts mehr in der Textdatei, obwohl ich 100% sicher bin, dass schon vor dem Absturz in
    die Datei geschrieben werden muss. Warum steht da nix? Wie kann ich machen dass da was steht??



  • Ein/Ausgabe arbeitet mit Pufferung, d.h. dass fputs zunächst in einen Puffer schreibt, der eine vom Compiler abhängige Größe hat. Erst wenn der voll ist, wird der Inhalt dem Betriebssystem übertragen, dass ihn dann nochmal puffert 😉 und schließlich irgendwann auf die Festplatte schreibt. Die Gründe dafür liegen darin, dass die Kommunikation mit dem Betriebssystem (oder gar mit der Platte) nicht gerade überirdisch schnell ist, also nimmt man sie am besten so selten wie möglich in Anspruch, dann aber in großen Blöcken.

    Es gibt 2 Möglichkeiten, das zu umgehen:

    1. mit fflush den Puffer vorzeitig an das OS übermitteln:
    fputs("Blah", file);
    fflush(file);
    
    1. Pufferung für einen Stream abschalten:
    setbuf(file, NULL);
    


  • Hat gewirkt...man dankt 😃


Anmelden zum Antworten