如果我定义并打开了一个我决定调用f
的文件,那么用f = NULL
简单地说fclose()
而不是正确关闭文件会有什么后果? ?
还是f = NULL
甚至不起作用?
答案 0 :(得分:6)
与带有垃圾收集器的语言(例如python
)相反,将文件指针设置为NULL
只会丢失文件句柄上的引用,但不是关闭文件。
这会导致潜在的错误,例如未刷新的缓冲区,锁定的文件,达到“每个进程打开的文件太多”的限制...取决于打开的模式和所使用的平台。
在支持资源跟踪的“现代”系统上,文件仍在退出时关闭(仍然可能会丢失一些缓冲区),但是某些旧版系统将保持文件打开,直到您重新启动(并且如果您的代码是某些插件的插件)更大的工具,直到关闭更大的工具后,资源跟踪才会应用)
关闭文件后,将句柄设置为NULL
,这被认为是一种好习惯,这样就不会再对关闭的文件调用fclose
了(它< em>降低风险,但可能有手柄的副本,因此并非100%安全):
if (f!=NULL)
{
fclose(f);
f = NULL;
}
答案 1 :(得分:1)
如果将f
设置为NULL,那么它所做的全部就是覆盖变量f
的值,从而丢失对它指向的FILE
对象的引用。
FILE
对象使用的资源不会被清理,因为从未调用过fclose
。