首页 > 解决方案 > 只读文件指针中是否需要 fclose()?

问题描述

我知道关闭每个打开的文件指针是一种很好的做法,但我一直认为 fclose() 仅在有人在写入/所有模式下处理文件时才真正起作用,而用户实际上需要将新内容保存在文件。

但是没有 fclose() 实际上会以任何方式影响只读指针吗?我已经进行了一些测试,但与使用 fclose() 时没有任何不同。

还有什么我应该注意的吗?

标签: cfilepointers

解决方案


打开的文件指针可能会泄漏,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 操作后操作开始失败


推荐阅读