为什么一定要调用fclose函数

版权声明:本文为博主原创文章,如需转载请注明出处 https://blog.csdn.net/bajianxiaofendui/article/details/84777733

为什么一定要调用fclose函数


     带缓存的文件操作是标准C 库的实现,第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。所以以后每次的读写操作并不是针对硬盘上的文件直接进行的,而是针对内存中的缓存的(何时从硬盘中读取文件或者向硬盘中写入文件有标准库的机制控制)。当缓存区域中的内容达到一定大小时,标准库会将该缓存内容刷新到磁盘上,此时才完成文件的真正写入。
当调用fopen对文件进行写操作时,如果在写的过程中,程序异常退出时,由于缓存区的空间一般都比较大(自己的电脑上测试大概在7,8M左右),之前写入的内容只是存在于缓存区中,并没有真正输出到磁盘的文件里。此时如果在程序退出前调用fclose函数,有两点好处:
(1)将缓存区中的内容立刻刷到磁盘文件里,避免文件没有写入;
(2)释放文件指针。
     当调用fopen对文件进行读操作时,还是要调用fclose来关闭文件指针,这是因为fopen函数打开一个文件,操作系统会分配文件描述符和I/O缓存,还有其他的一些东西,而fclose函数会关闭该文件描述符,并释放内存。所以,如果一个程序不关闭打开的文件,会造成内存泄漏(此处先借用这个词语),还有会因为操作系统因没有文件描述符可用而不能继续打开文件(后续再用fopen打开文件,返回的FILE*都为NULL)。
     在我的电脑上(WIN7 64位,8G)测试,最多可以打开508个文件而不关闭文件指针,当再打开第509个文件时,文件指针返回为空。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bajianxiaofendui/article/details/84777733