首页 > 解决方案 > 说文件为 NULL 而不是关闭它有什么缺点?

问题描述

如果我已经定义并打开了一个我决定调用的文件,那么简单地说而不是正确关闭文件f的后果是什么?f = NULLfclose()

或者f = NULL甚至不工作?

标签: c

解决方案


与具有垃圾收集器(如python)的语言相反,将文件指针设置为NULL只会丢失文件句柄上的引用,但不会关闭文件。

这会导致潜在的错误,例如未刷新的缓冲区、锁定的文件、达到“每个进程打开的文件太多”的限制……取决于打开模式和您所在的平台。

在支持资源跟踪的“现代”系统上,文件在退出时仍然关闭(您仍然可能会丢失一些缓冲区),但一些旧系统将保持文件打开,直到您重新启动(如果您的代码是某个更大工具的插件,在关闭更大的工具之前,资源跟踪不适用)

被认为是好的做法是在关闭文件NULL 后将句柄设置为,这样就没有再次调用fclose已关闭文件的风险(它降低了风险,但可能存在句柄的副本,因此它不是 100% 安全的):

if (f!=NULL)
{
  fclose(f);
  f = NULL;
}

推荐阅读