要写一个测试磁盘读写性能的测试软件,但是用fwrite类似函数好像都不准确,所以还是先做一下了解。
C文件概述
1、“文件(file)”:所谓“文件”是指一组相关数据的有序集合。数据以文件的形式存放在外部介质(一般是磁盘、磁带、光盘等)上,在操作系统中是以文件为单位对数据进行管理的。以文件名作为访问文件的标识。
2、C语言把文件看作一个字节序列,即由一连串的字节组成。根据文件中的数据组织形式,数据文件可分为ASCII码文件和二进制文件。
ASCII码文件,又称为“文本文件”(text),其每一个字节存放一个ASCII码。
二进制文件,把内存中的数据按其在内存中的存储形式存放在磁盘上。
例:十进制整数10000,在内存中占两个字节,其存放形式是:00100111,00010000。在二进制文件中也按这种方式存放。
但是,在ASCII文件中,十进制整数10000存放为31H、30H、30H、30H、30H,占五个字节,它们分别是1、0、0、0、0、0字母的ASCII码。
3、按照操作系统对磁盘文件的读写方式,文件可以分为“缓冲文件系统”和“非缓冲文件系统”。
缓冲文件系统:操作系统在内存中为每一个正在使用的文件开辟一个读写缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区。
非缓冲文件系统:指操作系统不自动开辟确定大小的读写缓冲区,而由程序为每个文件设定缓冲区。
在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件。ANSI C标准只采用缓冲文件系统。
在C语言中,没有输入输出语句,对文件的读写都是用库函数来实现的。本章只介绍ANSI C标准规定的缓冲文件系统。
文件类型指针
缓冲文件系统中,每一个使用的文件都在内存中开辟一个“文件信息区”,用来存放文件的相关信息(文件的名字、文件当前的读写位置、文件操作方式等)。这些信息保存在一个结构体变量中,该结构体是由系统定义的,取名为FILE。Turbo C 3.0 在stdio.h文件中有以下文件类型的声明:
typedef struct {
int level;
unsigned flags;
char fd;
unsigned char hold;
int bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
} FILE;
定义文件指针变量的一般形式为:
FILE *文件结构指针变量名
例如:FILE *fp;
注意:只有通过文件指针,才能调用相应的文件。
看起来使用FILE 文件指针相关函数都会使用到系统缓存,这样的结果不准确,CreateFile值得研究一下。。