Может ли функция fdopen() вызвать утечку памяти?
-
09-06-2019 - |
Вопрос
Я использую fdopen, чтобы связать поток с открытым файлом.
Когда я close()
файл, поток также автоматически отключается, и вся память потока возвращается в ОС, или мне нужно знать о файле fdopen'd и закрыть его определенным образом?
-Адам
Решение
close()
это системный вызов.Это закроет файловый дескриптор в ядре, но не освободит указатель на ФАЙЛ и ресурсы в libc.Вместо этого вам следует использовать fclose() для указателя на ФАЙЛ, который также позаботится о закрытии файлового дескриптора.
Другие советы
Ядро управляет этими ресурсами, и у вас нет никакого контроля над ними, кроме вызова close, который может освободить память, когда захочет (не позднее завершения процесса).
/Аллан
Не связан с StackOverflow