在只读文件指针中是否需要fclose()?

在只读文件指针中是否需要fclose()?,c,file,pointers,C,File,Pointers,我知道关闭打开的每个文件指针是一种很好的做法,但我一直认为fclose()实际上只在有人以写/全部模式处理文件时才起作用,用户实际上需要在文件上保存新内容 但是没有fclose()实际上会以任何方式影响只读指针吗?我做了一些测试,但与使用fclose()时没有任何不同 还有什么我应该注意的吗?打开的文件指针可能会在没有fclose()的情况下泄漏,并且当您多次执行文件操作时,它们可能会阻止打开更多文件 #include <stdio.h> int main(void) {

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

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


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

打开的文件指针可能会在没有
fclose()
的情况下泄漏,并且当您多次执行文件操作时,它们可能会阻止打开更多文件

#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;
}
这是一个多次执行
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;
}
#包括
内部主(空){
int i;
对于(i=0;i<1000;i++){
文件*fp=fopen(“test.txt”、“r”);
int数据;
printf(“%3d:”,i);
如果(fp!=NULL){
如果(fscanf(fp,%d,&data)==1){
printf(“数据=%d\n”,数据);
}否则{
看跌期权(“读取失败”);
}
fclose(fp);
}否则{
看跌期权(“fopen失败”);
}
}
返回0;
}
这是魔杖盒上的代码


另一方面,当我注释掉
fclose(fp)时行。

打开的文件指针可能会在没有
fclose()
的情况下泄漏,并且当您多次执行文件操作时,它们可能会阻止打开更多文件

#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;
}
这是一个多次执行
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;
}
#包括
内部主(空){
int i;
对于(i=0;i<1000;i++){
文件*fp=fopen(“test.txt”、“r”);
int数据;
printf(“%3d:”,i);
如果(fp!=NULL){
如果(fscanf(fp,%d,&data)==1){
printf(“数据=%d\n”,数据);
}否则{
看跌期权(“读取失败”);
}
fclose(fp);
}否则{
看跌期权(“fopen失败”);
}
}
返回0;
}
这是魔杖盒上的代码


另一方面,当我注释掉
fclose(fp)时行。

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

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

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