Frage

Natürlich ist die unmittelbare Antwort für die meisten Situationen ist „Ja“ , und ich bin fest davon überzeugt, dass ein Prozess korrekt Bereinigung sollte alle Ressourcen zugeordnet hat, aber was ich in meiner Situation ist ein langer Laufsystem-Daemon, der eine feste Anzahl von Datei-Deskriptoren beim Start öffnet und schließt sie alle vor dem Beenden.

Dies ist eine Embedded-Plattform, und ich versuche, den Code so kompakt wie möglich zu machen, während keinen schlechten Stil einzuführen. Aber da Filedeskriptoren vor Ausgang geschlossen ist wie auch immer, tut dies Bereinigungscode Dateideskriptors jeden Zweck? Schließen Haben Sie immer alle Ihre Filedeskriptoren?

War es hilfreich?

Lösung

Schluss Filedeskriptoren, wenn Sie fertig sind mit ihnen macht den Code wiederverwendbar und leichter zu erweitern. Das klingt für mich wie ein Fall, in dem Sie einen wichtigen Grund haben für das Lassen sie automatisch geschlossen lassen.

Andere Tipps

Ja, schließen Sie die Datei-Deskriptoren und kostenlos alle Heap-Speicher, auch wenn Sie wissen, dass das Betriebssystem es oben sauber wird - auf diese Weise, wenn Sie valgrind oder ein ähnliches Tool ausführen, müssen Sie nicht viel Lärm in der bekommen Ergebnisse, und Sie können "legit" fd Lecks leicht erkennen.

In der schönen Welt der Embedded-Plattform, es ist wirklich schwer zu sagen, was wäre passiert. Allerdings, wenn ich in der Situation bin, ich würde nur manuell testen, ob die Datei-ID wirklich freigegeben werden .. Und wenn der Raum so wichtig ist, vielleicht haben Sie diese Tatsache an anderer Stelle dokumentieren könnten.

Die einzige Sorge, die ich hinsichtlich Absperren haben würde Datei-Deskriptoren automatische Bereinigung zu verlassen, wäre, wie viel Sie für jede Daten, die Sie auf die Datei-Deskriptoren geschrieben haben, und wenn man vernünftigerweise mit einem Fehler behandeln zu schreiben.

write () blockieren muß nicht (je nachdem, wie es geöffnet war () ed in erster Linie) und warten auf Daten erfolgreich zu begehen, so gibt es Fälle, in denen die Nähe ausfallen können, da das zugrunde liegende Untersystem das begehen versagt schreiben und damit nahe Ausfahrten mit dem Scheitern anhängig und setzt errno auf EIO, und je nachdem, was Sie gerade geschrieben haben, können Sie oder können nicht wollen, einige Korrekturmaßnahmen ergreifen.

Zugegeben, dies ist eine Ecke Fall, in dem man wirklich über die Datenkonsistenz kümmern, das heißt ein DBMS-Typ-Anwendungen oder Reporting Sucess / Ausfall einer Sicherung. In vielen (die meisten?) Fälle tut es nicht wirklich wichtig, dass alle viel, und Sie schließen das Weglassen in Ordnung sein () Bereinigungs / Ausgang zu verarbeiten.

Mann 3 Ausgang:

....
All open stdio(3) streams are flushed and closed.  Files created by tmpfile(3) are removed.

Also ich glaube Haupt verlassen ruft effektiv die Exit-Funktion mit Rückgabewert der Haupt. Obwohl ich würde behaupten, dass es schlechter Stil ist. Ich persönlich immer explizit frei / schließen Sie alle erworbenen Ressourcen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top