Отпустите все открытые файлы и каталоги при выходе принудительно в C - PullRequest
4 голосов
/ 15 февраля 2010

Я хочу освободить все открытые файлы и каталоги, прежде всего моя программа открылась во время ее выполнения. Я хочу сделать это, потому что у меня очень большая программа, и она открывает много файлов и каталогов, которые я не могу отслеживать. Есть ли способ сделать это? означает, что я хочу получить список всех открытых файлов и каталогов и закрыть их при выходе.

Я знаю регистрацию обработчиков выхода, используя функцию atexit (). Можно ли с этим что-то сделать?

Edit: У меня есть Cygwin на Windows. Я хочу сделать вышеуказанное, потому что ресурсы моей программы не освобождаются автоматически. У меня есть каталог, который создается и затем открывается с помощью opendir (). После завершения работы моей программы, когда я пытаюсь удалить этот каталог, появляется сообщение «невозможно удалить, поскольку используется другой программой». Но когда я завершаю работу с explorer.exe и снова перезагружаюсь, только я могу удалить этот каталог.

Проблема в том, что это происходит неравномерно. Я могу удалить некоторые каталоги и не могу удалить некоторые.

Ответы [ 3 ]

4 голосов
/ 15 февраля 2010

Если под «отпустить» вы имеете в виду «закрыть», это все равно произойдет. Среда выполнения C и операционная система позаботятся об этом за вас. По завершении процесса все ресурсы, которые были открыты, будут закрыты. Это была бы очень редкая (и некачественная) среда, которая этого не делала.

1 голос
/ 15 февраля 2010

man signal должен дать вам несколько советов. Это ловит большинство сигналов завершения, а не только нормальные.

1 голос
/ 15 февраля 2010

Также проверьте _fcloseall ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...