说文件为NULL而不是关闭文件有什么弊端?

时间:2018-10-24 20:23:24

标签: c

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

还是f = NULL甚至不起作用?

2 个答案:

答案 0 :(得分:6)

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

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

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

关闭文件后,将句柄设置为NULL ,这被认为是一种好习惯,这样就不会再对关闭的文件调用fclose了(它< em>降低风险,但可能有手柄的副本,因此并非100%安全):

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

答案 1 :(得分:1)

如果将f设置为NULL,那么它所做的全部就是覆盖变量f的值,从而丢失对它指向的FILE对象的引用。

FILE对象使用的资源不会被清理,因为从未调用过fclose