c - 说文件为 NULL 而不是关闭它有什么缺点?
问题描述
如果我已经定义并打开了一个我决定调用的文件,那么简单地说而不是正确关闭文件f
的后果是什么?f = NULL
fclose()
或者f = NULL
甚至不工作?
解决方案
与具有垃圾收集器(如python
)的语言相反,将文件指针设置为NULL
只会丢失文件句柄上的引用,但不会关闭文件。
这会导致潜在的错误,例如未刷新的缓冲区、锁定的文件、达到“每个进程打开的文件太多”的限制……取决于打开模式和您所在的平台。
在支持资源跟踪的“现代”系统上,文件在退出时仍然关闭(您仍然可能会丢失一些缓冲区),但一些旧系统将保持文件打开,直到您重新启动(如果您的代码是某个更大工具的插件,在关闭更大的工具之前,资源跟踪不适用)
被认为是好的做法是在关闭文件NULL
后将句柄设置为,这样就没有再次调用fclose
已关闭文件的风险(它降低了风险,但可能存在句柄的副本,因此它不是 100% 安全的):
if (f!=NULL)
{
fclose(f);
f = NULL;
}
推荐阅读
- javascript - 回调、承诺或等待 API 请求
- c# - MimeKit 附件正文编码问题
- delphi - 显示模态时调用覆盖的 ShowModal 时出错
- android - 如何在浮动操作模式下在 Android 9 上显示菜单项图标
- c++ - 错误:没有重载函数“mbed::Ticker::attach”的实例与参数列表匹配
- compiler-errors - 在 Modelsim VHDL 中编译
- python - Python - 从熊猫系列中删除停用词的功能
- reactjs - 无法读取未定义反应复选框过滤器的属性“包含”
- php - 在表单提交时增加 PHP 变量
- python - 修复积分器