Schließen / Reinigung „gemischter“ Filedeskriptoren / Buchsen
-
01-07-2019 - |
Frage
Wenn ich eine Buchse annehmen () verwenden und eine Datei aus ihm heraus mit fdopen (), was muss ich alles tun, um aufzuräumen? Muß ich fclose () auf der FILE, shutdown () und close () auf dem Sockel oder nur die shutdown () und oder close () oder fclose () tun? Wenn ich das tue fclose nicht (), kann ich frei haben () die Datei Zeiger manuell?
Lösung
Von Mann fdopen:
Der Dateideskriptor nicht dup'ed, und wird geschlossen, wenn der Strom durch fdopen () erstellt wird geschlossen
So würde ich nur fclose () verwenden, die auch den zugrunde liegenden Dateideskriptors schließt. Ich weiß nicht, ob shutdown () benötigt wird, auch nicht.
Andere Tipps
http://opengroup.org/onlinepubs/007908775/xsh/fclose. html
Die fclose () Funktion wird ein durchführen close () auf dem Dateideskriptor ist, die assoziiert zeigte mit dem Strom von Strom.
Wenn Sie Ihre Steckdose in einem Strom eingewickelt haben es wahrscheinlich nicht mehr sinnvoll zu shutdown (), zumindest nicht, ohne den Strom ersten Spülung. Aber ich will nicht schwören, weil ich nicht weiß, dass es keine Anwendungen, bei denen Sie zum Herunterfahren wollen würden () und nicht nur in der Nähe ().
Sie haben 2 Dinge hier müssen Sie aufzuräumen: die von FILE
und dem Dateideskriptor durch die Fassung, dargestellt Strom. Sie müssen den Strom zuerst, dann den Dateideskriptor schließen. Also, in der Regel müssen Sie fclose()
Objekte FILE
, close()
dann alle Datei-Deskriptoren.
Persönlich habe ich nie shutdown()
verwendet, wenn ich mich selbst zu bereinigen möchten, so kann ich nicht sagen.
Bearbeiten
Andere haben zu Recht darauf hingewiesen, dass fdclose()
auch den zugrunde liegenden Dateideskriptor schließen, und da close()
auf einem engen Dateideskriptors Aufruf wird zu einem Fehler führen, in diesem Fall, dass Sie nur fdclose()
benötigen.