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.


Anmelden zum Antworten