Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fclose a file that is already fclose

Tags:

c++

c

fclose

In my programm I may close a file that is already close. What happen when I do a fclose on a file already close ?

And if you can't do so, how to know if a file is closed or open ?

like image 673
Evans Belloeil Avatar asked Jul 03 '14 14:07

Evans Belloeil


1 Answers

Calling fclose twice with the same stream is undefined behaviour - most likely crash. There is no way to check if FILE* has been closed already, so the safe solution is to set pointer to NULL as soon as it is closed:

fclose(fh);
fh = NULL;

Sources: "The value of a pointer to a FILE object is indeterminate after the associated file is closed" (C draft standard). "After the call to fclose(), any use of stream causes undefined behaviour." (The Single UNIX ® Specification).

like image 98
Wojtek Surowka Avatar answered Sep 18 '22 09:09

Wojtek Surowka