在只读文件指针中是否需要fclose()?
我知道关闭打开的每个文件指针是一种很好的做法,但我一直认为fclose()实际上只在有人以写/全部模式处理文件时才起作用,用户实际上需要在文件上保存新内容 但是没有fclose()实际上会以任何方式影响只读指针吗?我做了一些测试,但与使用fclose()时没有任何不同在只读文件指针中是否需要fclose()?,c,file,pointers,C,File,Pointers,我知道关闭打开的每个文件指针是一种很好的做法,但我一直认为fclose()实际上只在有人以写/全部模式处理文件时才起作用,用户实际上需要在文件上保存新内容 但是没有fclose()实际上会以任何方式影响只读指针吗?我做了一些测试,但与使用fclose()时没有任何不同 还有什么我应该注意的吗?打开的文件指针可能会在没有fclose()的情况下泄漏,并且当您多次执行文件操作时,它们可能会阻止打开更多文件 #include <stdio.h> int main(void) {
还有什么我应该注意的吗?打开的文件指针可能会在没有
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
写入所需内容,然后关闭它。打开文件会消耗一些用户和内核资源。如果在没有关闭的情况下打开足够多的文件,最终将导致资源分配失败。不要这样做。应该释放所有资源。打开文件会消耗一些用户和内核资源。如果在没有关闭的情况下打开足够多的文件,最终将导致资源分配失败。不要这样做。所有的资源都应该被释放。