c - 只读文件指针中是否需要 fclose()?
问题描述
我知道关闭每个打开的文件指针是一种很好的做法,但我一直认为 fclose() 仅在有人在写入/所有模式下处理文件时才真正起作用,而用户实际上需要将新内容保存在文件。
但是没有 fclose() 实际上会以任何方式影响只读指针吗?我已经进行了一些测试,但与使用 fclose() 时没有任何不同。
还有什么我应该注意的吗?
解决方案
打开的文件指针可能会泄漏,fclose()
并且当您多次执行文件操作时,它们可能会阻止打开更多文件。
这是一个fopen()
多次执行的测试代码。
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 1000; i++) {
FILE* fp = fopen("test.txt", "r");
int data;
printf("%3d : ", i);
if (fp != NULL) {
if (fscanf(fp, "%d", &data) == 1) {
printf("data = %d\n", data);
} else {
puts("read failed");
}
fclose(fp);
} else {
puts("fopen failed");
}
}
return 0;
}
此代码在 Wandbox 上成功完成了 1000 次操作。
另一方面,当我注释掉该fclose(fp);
行时,在成功 251 操作后操作开始失败。
推荐阅读
- postgresql - 在 wso2 流式集成器中使用 PostgreSQL 作为数据源,
- python-3.x - 使用多个 supervisord 程序线程来执行单独的 APScheduler 任务,还是使用一个带有一个调度程序的程序来执行多个任务?
- sendto - 在 Windows 文件资源管理器中动态和实时定义“发送到”文件的文件路径
- r - 在 R 中过滤包含多个值和 null 的列
- wordpress - wordpress 中的多个搜索过滤器选择一个类别和一个自定义帖子分类
- typescript - 如何修复 esLint “ parserOptions.project 已为 @typescript-eslint/parser 设置”?
- c++ - Particle.io waitFor() 函数类似于系统
- excel - 如何将超过一百万行的数据库加载到数据透视表缓存中?
- mysql - 如何在 MySQL 5.7.34 中具有 JSON 数据类型列的表中有条件地选择行?
- javascript - 基于现有过滤创建新数组