2008-09-16 11 views
3

Ich verwende fdopen, um einen Stream mit einer geöffneten Datei zu verknüpfen.Kann ein fdopen() ein Speicherleck verursachen?

Wenn ich die Datei close() bin, wird der Stream automatisch ebenfalls getrennt, und der gesamte Stream-Speicher wird an das Betriebssystem zurückgegeben, oder muss ich die fdopen'd-Datei beachten und sie auf eine bestimmte Weise schließen?

-Adam

Antwort

5

close() ist ein Systemaufruf. Es wird den Dateideskriptor im Kernel schließen, aber den FILE-Pointer und die Ressourcen in libc nicht freigeben. Sie sollten stattdessen fclose() für den FILE-Pointer verwenden, der auch dafür sorgt, dass der Dateideskriptor geschlossen wird.

-1

Der Kernel verwaltet diese Ressourcen, und Sie haben keine Kontrolle über sie andere als die knapp die den Speicher freizugeben, wenn es (spätestens Prozessbeendigung) will.

/Allan

Verwandte Themen