wie kann ich überprüfen, ob ein File-Descriptor noch gültig ist?
-
Wenn mein Programm mitten im Ablauf unterbrochen wird, möchte ich alle offenen File-Descriptoren mit fclose(FILE *stream) schließen.
Nun muss ich herausfinden ob mein Descriptor noch gültig ist, denn wenn ich er schon vorher geschlossen wurde und ich ihn nun wieder schliesse bekomme ich ein Seg-fault.
-
du könntest beim schließen den FILE* auf 0 setzen und darauf prüfen.
-
Habe ich mir auch schon gedacht, aber dann habe ich nicht den Fall ausgeschlossen, daß die Unterbrechung genau zwischen fclose und dem setzen des File-Descriptors auf 0 auftaucht.
Weiss einer vielleict wie der Befehl fcloseall() genau funktioniert, laut man-page sollte dieser alle File-Descriptoren des rufenden Prozesses schließen.
Werden die offenen Descriptoren irgendwo im Kernel gelistet und ich kann sehen ob wirklich alle geschlossen wurden?
-
der Kernel schließt die Filehandles automatisch, wenn dein Programm beendet wird und gibt auch den allokieren Speicher frei.
Darum musst du dich nicht explizit kümmern.
-
Das wusste ich nicht. Ich dachte ich muss dafür sorgen, da immer überall erwähnt wird man solle alles schließen bevor das Programm beendet wird!
Besten Dank!
-
Bringt doch bitte nicht die OS-Ebene mit stdio.h durcheinander. Filedeskriptoren bekommt man vom Kernel mittels open, man nutzt sie mit read, write usw. und schließt sie mit close. Das sind einfache Ganzzahlen. Die stdio.h-Funktionen (fopen, fclose, fgetc etc.) bilden eine gepufferte Schicht darüber. Man bekommt von fopen einen Zeiger auf ein FILE-Objekt, keinen Filedeskriptor.
Eine Aussage über Filedeskriptoren bringt dich also überhaupt nicht weiter, wenn du mit der stdio arbeitest.