在我的程序中,我可能会关闭已经关闭的文件。当我对一个已经关闭的文件执行fclose
操作时会发生什么?
如果您无法这样做,如何知道文件是关闭还是打开的?
使用相同流两次调用 fclose
是未定义行为 - 最可能会崩溃。无法检查FILE*
是否已关闭,因此安全的解决方案是在关闭后立即将指针设置为NULL:
fclose(fh);
fh = NULL;
来源:“在相关文件关闭后,指向FILE对象的指针的值是未确定的”(C草案标准)。 “调用fclose()后,任何对流的使用都会导致未定义的行为。”(Single UNIX®规范)。
fopen
失败,FILE*
将设置为NULL
,这样您就可以知道FILE*
是否已设置。如果要更加安全,请在fclose
后将其设置为NULL
- Elias Van Ootegem