В моей программе я могу закрыть файл, который уже близок. Что произойдет, когда я сделаю fclose
по уже закрытому файлу?Fclose файл, который уже fclose
И если вы не можете это сделать, как узнать, закрыт или открыт файл?
В моей программе я могу закрыть файл, который уже близок. Что произойдет, когда я сделаю fclose
по уже закрытому файлу?Fclose файл, который уже fclose
И если вы не можете это сделать, как узнать, закрыт или открыт файл?
Вызов fclose
дважды с тем же потоком - это неопределенное поведение - скорее всего, сбой. Там нет никакого способа проверить, если FILE*
был уже закрыт, поэтому безопасное решение установить указатель на NULL, как только он будет закрыт:
fclose(fh);
fh = NULL;
Источники: «Значение указателя на объект FILE является неопределенный после того, как связанный файл закрыт »(C-проект стандарта). «После вызова функции fclose() любое использование потока вызывает неопределенное поведение». (Единая спецификация UNIX ®).
Похоже, что некоторые из этих результатов отвечают на ваш вопрос. – crashmstr
Нет ... Но спасибо за проголосовать ... Не могу задать вопрос на этом сайте :( –
Я просмотрел результаты, и кажется, что они отвечают на ваш вопрос, как указано. [Что происходит с указателем FILE после файл закрыт?] (http://stackoverflow.com/questions/8441059/what-happens-to-file-pointer-after-file-is-closed), [Двойная бесплатная ошибка в fclose() для ранее закрытого дескриптора файла ] (http://stackoverflow.com/questions/12811464/double-free-error-on-fclose-on-previously-closed-file-handle) – crashmstr