2014-07-03 4 views
2

В моей программе я могу закрыть файл, который уже близок. Что произойдет, когда я сделаю fclose по уже закрытому файлу?Fclose файл, который уже fclose

И если вы не можете это сделать, как узнать, закрыт или открыт файл?

+0

Похоже, что некоторые из этих результатов отвечают на ваш вопрос. – crashmstr

+0

Нет ... Но спасибо за проголосовать ... Не могу задать вопрос на этом сайте :( –

+0

Я просмотрел результаты, и кажется, что они отвечают на ваш вопрос, как указано. [Что происходит с указателем 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

ответ

11

Вызов fclose дважды с тем же потоком - это неопределенное поведение - скорее всего, сбой. Там нет никакого способа проверить, если FILE* был уже закрыт, поэтому безопасное решение установить указатель на NULL, как только он будет закрыт:

fclose(fh); 
fh = NULL; 

Источники: «Значение указателя на объект FILE является неопределенный после того, как связанный файл закрыт »(C-проект стандарта). «После вызова функции fclose() любое использование потока вызывает неопределенное поведение». (Единая спецификация UNIX ®).