OS在管理文件时,使用“文件控制块”这样数据:控制块实质上就是(关于一个文件的)一堆数据,数据越详细,OS越能对文件进行详尽的管控;文件控制块又称:FBC。
FBC是OS的有限资源。
OS对文件进行操作是使用一种机制:电视机机制。电视机并没有360万平方公里,但是小小的电视机却能看到无限广阔的世界(只要有人去拍)。OS对文件的操作也是类似,OS并不能把一个(例如仙剑奇侠这个游戏中的一个场景文件)高达一个G的文件也全部调入内存中执行。
对文件的操作有:创建、读、写:编程对文件进行“读/写”操作,需要在内存中进行。
不同的程序设计语言,都对文件操作给出了支持;不同的程序设计语言对FCB进行了各自的封装;c语言用FILE类型封装FCB。
对文件进行编程,需要先申请FCB。
FILE *fp;
fp = fopen ("abc.txt","r"); //fopen()函数的核心功能是:向OS申请FCB。
// CPU的运行模式又分为**核心态**和**用户态**,所以,当CPU执行到这时,CPU的状态就从用户态
// 变为核心态,从而进入操作系统的内部,执行它的有关代码,实现以只读的方式打开"abc.txt"。
// 当系统调用完成后,控制权返回给用户程序。
//fopen()的本质是申请操作系统的FCB资源!!!
刚才已经提到文件控制块是OS的有限资源,所以我们要fclose()归还它。
假如没有归还这块文件控制块,虽然在这个程序运行结束时,操作系统会自动释放这块文件控制块,这块文件控制块也可以在另一个程序运行时被“使用”,然而,在运行过程中,这个控制块会变得不可控!!!所以,在使用完后必须要归还。
与之类似的就像malloc一块空间和free一块空间,申请以后必须要释放,否则会造成内存泄漏。