EOF vs clearerr()
-
Hi,
Wenn ein Fehler in einem Dateistream auftretet oder das EOF erreicht wird, werden ja Flags im FILE * - Zeiger gesetzt. Werden denn diese Flags automatisch wieder zurückgesetzt, sobald ich die Datei schließe? Oder muss ich trotzdem mit clearerr() explizit die Flags zurücksetzen?
freundliche Grüße
-
Naja, die Flags werden nicht im FILE-Zeiger gesetzt, sondern in dem struct auf das er zeigt. Und wenn du ein fclose da drauf machst, dann wird es "zerstört" (um mal objektorientierte Sprechweise zu benutzen). Wenn du wieder ein fopen machst, dann zeigt dein Zeiger woanders hin.
-
SeppJ schrieb:
Naja, die Flags werden nicht im FILE-Zeiger gesetzt, sondern in dem struct auf das er zeigt. Und wenn du ein fclose da drauf machst, dann wird es "zerstört" (um mal objektorientierte Sprechweise zu benutzen). Wenn du wieder ein fopen machst, dann zeigt dein Zeiger woanders hin.
[klugscheiß]Eventuell ... kann auch sein, dass er auf den gleichen Speicher (nur mit anderen Werten) zeigt.[/klugscheiß]
-
Ja. Prinzipiell ist das sogar gar nicht so unwahrscheinlich. Aber das Objekt würde auf jeden Fall komplett neu initialisiert.
-
Hi,
1. Aber wenn fclose() verwendet wird, dann werden doch alle Flags automatisch zurückgesetzt oder?
2. Wieso muss ich überhaupt die Fehlerflags zurücksetzen? Auch wenn ein Fehlerflag gesetzt ist, kann ich mit der Datei weiterhin ganz normal arbeiten, davon lesen und hineinschreiben. Wozu dann das Ganze?mfg
-
TurnerX schrieb:
1. Aber wenn fclose() verwendet wird, dann werden doch alle Flags automatisch zurückgesetzt oder?
Die Frage ist hinfällig. Wenn fclose benutzt wird, dann ist es mit diesem FILE-Objekt sowieso zu Ende. Danach gibt es kein Zurück mehr. Ob intern die Flags zurück gesetzt werden ist folglich egal, sofern du nicht mit irgendwelchen Hacks anfängst und versuchst ungültige Pointer zu benutzen. Stell dir vor, dass auf den FILE-Pointer ein free angewendet wurde (vermutlich passiert intern sogar genau dies, nachdem die Handles freigegeben wurden). Was danach genau an der Stelle im Speicher steht ist reichlich egal.
2. Wieso muss ich überhaupt die Fehlerflags zurücksetzen? Auch wenn ein Fehlerflag gesetzt ist, kann ich mit der Datei weiterhin ganz normal arbeiten, davon lesen und hineinschreiben. Wozu dann das Ganze?
Damit du feststellen kannst, ob bei diesen weiteren Operationen neue Fehler aufgetreten sind?
-
Hi,
Nur mal um das zu unterstreichen: Ist also clearerr() nur dazu da, damit ich feststellen kann ob neue Fehler aufgetreten sind? Sonst arbeite ich ja trotz gesetzten Fehler-Flags ganz normal mit der Datei weiter?
liebe Grüße
-
Das ist ziemlich genau, was auf der Packung steht.
Was ich nicht verstehe ist, wie du es für eine gute Idee halten kannst, mit gesetzten Fehlerflags weiter zu arbeiten.