缓冲文件系统
-
缓冲文件系统的定义与原理
-
应用程序是如何进行文件数据的访问的呢?由于系统对磁盘文件数据的存取速度与内存数据存取的速度不同,而且文件数据量较大,数据从磁盘读到内存或从内存写到磁盘不可能瞬间完成,所以为了提高数据存取的效率,C 程序对文件的处理采用缓冲文件系统的方式进行,这种方式要求程序与文件之间有一个内存缓冲区,程序与文件的数据交换通过该缓冲区来进行。
- 根据这种文件缓冲的特性,把文件系统分为缓冲文件系统与非缓冲文件系统。
- 对于缓冲文件系统,在进行文件操作时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元),C 程序对文件的所有操作都通过对文件缓冲区的操作来完成。当程序要向磁盘文件写入数据时,先把数据存入缓冲区,然后再由操作系统把缓冲区的数据真正存入磁盘。若要从文件读入数据到内存,先由操作系统把数据写入缓冲区,然后程序把数据从缓冲区读入到内存。对于非缓冲文件系统,文件缓冲区不是由系统自动分配,而需要编程者在程序中用 C 语句实现分配。
- 不同的操作系统对文件的处理会有些相应的规定。在 UNIX 操作系统中,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件,而标准 ANSI C 中规定只采用缓冲文件系统。因此,下面重点介绍缓冲文件系统。
- 缓冲文件系统的工作原理如图 12.2 所示。
- 图 12.2 包括三个部分,左边是 C 程序,右边是磁盘,中间是内存缓冲区。程序要操作磁盘文件的数据,必须要借助缓冲区。缓冲文件系统规定磁盘与内存缓冲区之间的交互由操作系统自动完成。程序要处理数据,只需要跟内存缓冲区打交道即可。因此,C 程序在处理文件时,可不必考虑外部磁盘的物理特性。
- 使用缓冲文件系统可以大大提高文件操作的速度,文件是保存在磁盘上的,磁盘数据的组织方式按扇区进行,规定每个扇区大小为512B,1B即一个字节,缓冲区的大小由具体的C语言版本决定,一般微型计算机中的C语言系统,也把缓冲区大小定为512B,恰恰与磁盘的一个扇区大小相同,从而保证了磁盘操作的高效率。
- 缓冲文件系统将会自动在内存中为被操作的文件开辟一块连续的内存单元,作为文件缓冲区,当要把数据存储到文件中时,首先把数据写入文件缓冲区,一旦写满了512B,操作系统自动把全部数据写入磁盘的一个扇区,然后把文件缓冲区清空,新的数据继续写入到文件缓冲区,当要从文件读取数据时,系统首先自动把一个扇区的数据导入到文件缓冲区,供C程序逐个读入数据,一旦512B数据都被读入,系统自动把下一个扇区内容导入文件缓冲区,供C程序继续读入新数据。
文件控制块(FCB)
-
文件控制块的定义与作用
-
为了能够更清楚地理解 C 语言文件操作原理,介绍一下文件控制块。已知文件缓冲区与磁盘文件之间的处理是由操作系统自动完成的,那么操作系统具体是如何处理的呢?答案是通过操作文件控制块(File Control Block, FCB)实现的。文件控制块包括文件属性、文件名、驱动器号、扩展名、文件长度以及文件记录状态等信息。
-
如图 12.3 所示,操作系统为了控制管理文件,采用文件表来管理文件,它给每个文件顺序编号,并对应一个不同的 FCB。程序要访问文件时,用一个 FILE 指针指向文件缓冲区,此时操作系统会把文件缓冲区与 FCB 相关联,FCB 又直接对应于磁盘。因此不管有多少文件,操作系统都能有效地控制管理。如果程序想要对某个文件进行操作,只要告诉缓冲文件系统 “要访问哪个文件(文件名)”,操作系统会根据 “文件表” 立即在磁盘中找到该文件,并把相应的 FCB 编号与文件缓冲区相关联,进而与程序建立了关联。
-