【问题标题】:Is fclose() necessary in read only file pointers?只读文件指针中是否需要 fclose()?
【发布时间】:2021-07-25 11:02:09
【问题描述】:

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

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

我还有什么需要注意的吗?

【问题讨论】:

  • 打开文件会消耗一些用户和内核资源。如果您打开足够多的文件而不关闭它最终会导致资源分配失败。不要这样做。
  • 所有资源都应该被释放。

标签: c file pointers


【解决方案1】:

如果没有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 上的此代码 successfully done 1000 operations

另一方面,当我注释掉 fclose(fp); 行时,the operation began to fail after successful 251 operations

【讨论】:

    【解决方案2】:

    处理文件时,我使用“w+”打开文件以创建或覆盖现有文件。然后,当我想向文件写入新条目时,我再次使用“wa”打开它,使用 fprintf 写入您需要的内容,然后将其关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多