如果没有正确使用fclose函数,会怎样?
一个很老的帖子
关于文件打开后写入数据未关闭而再次打开再次写入数据的问题
想问一下,上面那个帖子中二楼给出的几个测试程序,是如何工作的?
代码1
my_file = fopen("11.txt", "w");
fprintf(my_file,"start!\n");
//fclose(my_file);//在此处不关闭文件
my_file = fopen("11.txt", "a");
fprintf(my_file,"my file\n");
fclose(my_file);
代码2
my_file = fopen("11.txt", "w");
fprintf(my_file,"start!\n");
fclose(my_file);//在此处不关闭文件
my_file = fopen("11.txt", "a");
fprintf(my_file,"my file\n");
//fclose(my_file);
代码3
my_file = fopen("11.txt", "w");
fprintf(my_file,"start!\n");
//fclose(my_file);//在此处不关闭文件
my_file = fopen("11.txt", "a");
fprintf(my_file,"my file\n");
//fclose(my_file);
代码4
my_file = fopen("11.txt", "a");//此处也已追加方式
fprintf(my_file,"start!\n");
//fclose(my_file);//在此处不关闭文件
my_file = fopen("11.txt", "a");
fprintf(my_file,"my file\n");
fclose(my_file);
fclose
文件操作
分享到:
------解决方案--------------------
打开文件和关闭文件都是比较耗时的。
如果可以不关闭也没有多大关系的!
只要你在下次对文件进行操作的时候注意文件流句柄的位置就好,
防止覆写或者读到空白数据就好!
------解决方案--------------------
我认为:不确定。
1. 是否可以同时多次fopen一个文件取决于操作系统,而不是C语言。
2. 缓冲机制和与对应文件关联的设备有关:全缓冲,无缓冲,行缓冲,缓冲的大小。
你可以研究某个平台是如何实现的,但是不可以把结论推广到其他平台。
------解决方案--------------------
fopen函数打开一个文件,操作系统会分配文件描述符和I/O缓存,还有其他的一些东西,而fclose函数会关闭该文件描述符,并释放内存,所以,如果一个服务器程序不关闭打开的文件,会造成内存泄漏(此处先借用这个词语),还有会因为操作系统因没有文件描述符可用而不能继续打开文件
楼主最好去看下FILE这个结构体类型中的实际内容,有助于了解文件IO的一些事情