Kann ein fdopen () verursacht ein Speicherleck?
-
09-06-2019 - |
Frage
Ich benutze fdopen einen Stream mit einer geöffneten Datei zugeordnet werden soll.
Wenn ich die Datei close()
, ist der Strom automatisch auch distanzierte, und alle Stromspeicher an das Betriebssystem zurückgegeben, oder muss ich bewusst die fdopen'd Datei sein und es auf eine bestimmte Weise in der Nähe?
-Adam
Lösung
close()
ist ein Systemaufruf. Es wird den Dateideskriptor in dem Kernel schließen, wird aber den Dateizeiger und Ressourcen in libc nicht befreien. Sie sollten stattdessen fclose () auf dem FILE-Pointer verwenden, die auch Pflege Schließen den Dateideskriptor stattfinden wird.
Andere Tipps
Der Kernel verwaltet diese Ressourcen, und Sie haben keine Kontrolle über sie andere als die knapp die den Speicher freizugeben, wenn er will (spätestens Prozessbeendigung).
/ Allan