Un fdopen() può causare una perdita di memoria?
-
09-06-2019 - |
Domanda
Utilizzo fdopen per associare uno stream a un file aperto.
Quando io close()
file, anche il flusso viene automaticamente dissociato e tutta la memoria del flusso viene restituita al sistema operativo oppure devo essere consapevole del file fdopen'd e chiuderlo in un modo specifico?
-Adamo
Soluzione
close()
è una chiamata di sistema.Chiuderà il descrittore di file nel kernel, ma non libererà il puntatore FILE e le risorse in libc.Dovresti invece usare fclose() sul puntatore FILE, che si occuperà anche di chiudere il descrittore di file.
Altri suggerimenti
Il kernel gestisce tali risorse e non hai alcun controllo su di esse se non la chiusura della chiamata che può liberare la memoria quando lo desidera (entro la fine del processo).
/Allan