Explizit schließen Datei-Handles oder das Betriebssystem sie in Unix C-Programmierung schließen lassen?

StackOverflow https://stackoverflow.com/questions/457803

  •  19-08-2019
  •  | 
  •  

Frage

In Unix C-Programmierung, ist es gute Praxis berücksichtigt explizit schließen Datei-Handles, bevor der Prozess beendet wird, oder ist es eine gute Praxis der OS lassen Sie die Datei-Handles schließen und damit unnötige Code vermeiden?

Welche der beiden würden im Allgemeinen als die bevorzugte Alternative in Betracht gezogen werden?

Beispiel:

int main (int argc, char* argv[])
{
    int sd;
    sd = socket(...);

    // Snip

   close(sd); // Good or bad practice?
   return 0;
}
War es hilfreich?

Lösung

Im Allgemeinen ist der Code, den die Öffnung tut und Schließen nicht weiß, ob der Prozess sofort Ausfahrt geht -. So ist es am besten expliziter Code enthält

Auch wenn der Code auf der obersten Ebene main () Funktion aufhält, wäre es immer noch eine gute Idee sein, falls der Code immer wieder verwendet werden.

Andere Tipps

Es ist gute Praxis betrachtet, sie selbst zu schließen.

Wahrscheinlich, weil es eine gute Gewohnheit ist, falls Ihr Programm wächst und Ausgang tritt nicht für einige Zeit, nachdem Sie eine bestimmte „Datei“ beenden verwenden.

Die Ausnahmen sind stdin, stdout und stderr, die Ihr Prozess nicht geöffnet wurde.

Im übrigen ist der UNIX-Begriff ist "Dateideskriptor".

Auf jeden Fall eine gute Praxis, sie zu schließen, wenn Sie können.

Wenn Ihr Programm ändert, so dass die Datei eher früher geschlossen wird, als später brauchen Sie sich nicht daran erinnern, dass close() später hinzuzufügen, wenn die Datei-I / O-Refactoring wird.

Ich habe seit Universität nicht verwendet Unix, sondern auf Unix Schließen der Datei verlassen Greifen Sie die Anzahl der Möglichkeiten sind Reduzierung des Code verwendet werden kann.

Sie bauen für sich selbst in einem Alptraum, wenn Ihr Code jemals auf eine andere Plattform portiert werden muss, oder wenn der Code geändert werden muss als lange Lauf Dienst ausgeführt werden, ohne explizite Ressourcenmanagement werden Sie bald auslaufen von Ressourcen.

Ich hoffe, Sie finden diese Informationen hilfreich,

Es ist eine sehr gute Übung den Descriptor zu schließen, wenn Ihr Programm wird weitergehen, aber der Deskriptor benötigt nicht mehr.

Dann wieder, es hängt von dem Dateideskriptor Typ. close () eine Buchse ing spülen wird, zum Beispiel, und wenn dies möchten Sie vielleicht nicht wiederholen.

ich glaube, seine fast „universal“, wenn Sie O Ressourcen geöffnet haben, sollten Sie sie immer richtig schließen, nachdem Sie mit ihnen finnished. Auf diese Weise kann diese Ressourcen freigeben, so dass sie von anderen Anwendungen verwendet werden.

Mit dem auf dem O verläßt Ihre Griffe schließen er nur sie gehen zu schließen, wenn er denkt, dass Sie nicht mehr benötigen (App Ausfahrt zum Beispiel). Sie sollten immer die Systemressourcen freigeben.

Der überwältigend wichtigste Grund, warum es gut betrachtet hat alle Dateien schließen Sie öffnen ist, so dass Sie mir herausfinden können / O-Fehler und sie den Benutzer melden. Aus dem gleichen Grunde ist es wahrscheinlich eine gute Idee zu spülen (oder möglicherweise zu schließen) stdout und stderr, wenn Sie sie schreiben.

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