Fclose a file that is already fclose

10

在我的程序中,我可能会关闭已经关闭的文件。当我对一个已经关闭的文件执行fclose操作时会发生什么?

如果您无法这样做,如何知道文件是关闭还是打开的?


3
没有...但是感谢你的负评...无法在这个网站上提问 :( - Evans Belloeil
2
试一下看看...但是:如果fopen失败,FILE*将设置为NULL,这样您就可以知道FILE*是否已设置。如果要更加安全,请在fclose后将其设置为NULL - Elias Van Ootegem
@crashmstr 对我来说有点不同 - 这个问题询问当您调用 fclose 两次时应该发生什么 - 而那个问题则是说“嘿,我的特定库实现记录了一些我不想要的东西” - 这通常不应该是这种情况 - 并且要求一个解决方法。当然,Evans 可能不幸地遇到了相同的实现/问题,但这还没有被证实。 - Tony Delroy
@EliasVanOotegem 哈,谢谢你的支持。 - Evans Belloeil
2
不清楚为什么这个问题被踩了,我找不到旧的重复问题。 - Shafik Yaghmour
显示剩余3条评论
1个回答

20

使用相同流两次调用 fclose 是未定义行为 - 最可能会崩溃。无法检查FILE*是否已关闭,因此安全的解决方案是在关闭后立即将指针设置为NULL:

fclose(fh);
fh = NULL;

来源:“在相关文件关闭后,指向FILE对象的指针的值是未确定的”(C草案标准)。 “调用fclose()后,任何对流的使用都会导致未定义的行为。”(Single UNIX®规范)。


标准似乎不适用于使用 NULL 调用 fclose 的情况,因此这是一种未定义的行为,可能导致崩溃。 - אנונימי

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接