“文件”显然由文件系统管理,而如今大多主流的文件系统都由操作系统管理。一般来说,操作系统使用描述符记录打开文件的资源,fopen() 函数则是用于创建描述符的,

它返回的 FILE * 指针指向的就是描述符,而 fclose() 的作用则是释放这些描述符,毕竟描述符也是会消耗系统资源的。

显然,如果不调用 fclose() 函数关闭打开的文件,描述符将残留在系统中,直到程序终止运行才会被系统回收。

当然了,要是在C语言程序中,需要频繁的调用 fopen() 函数重复打开同一个文件,如果没有调用 fclose() 函数,随着C语言程序的运行,将会有越来越多的描述符泄漏。

等达到一定的次数后,再调用 fopen() 函数,操作系统要么拒绝,要么无法创建文件描述符,此时 fopen() 函数就无法成功执行了,只能返回错误码。

此外,fwrite() 函数一般并不直接将数据写入磁盘,而是暂时将数据放在缓冲里,等到时机合适时,缓冲里的数据才会被真正写入磁盘。

调用 fclose() 函数能够确保缓冲里的数据真正写入磁盘,防止C语言程序意外终止时丢失数据。

只要C语言程序还在运行,如果持续的打开文件而又不关闭,最可能的结果是当前进程的文件描述符被用完,再调用 fopen() 函数就会失败,

在 Windows 上,还会影响其他进程使用被占用的文件,因为默认情况下,文件是以独占模式被打开的,这样其他进程就无法打开这些文件了。

不过,一旦C语言程序结束运行,绝大多数现代操作系统都会回收程序相关的资源,包括打开的文件。

自学C/C++编程难度很大,如果你想更快提升自己的编程能力和编写项目的水平,欢迎一起共同成长!

UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

分享(源码、项目实战视频、项目笔记,基础入门教程)

免费学习:

   免费学习:

更多推荐

c/c++编程笔记:程序编译中不关闭打开的文件,会发生什么?