程序除能直接使用前面各章都使用的不带文件指针的标准输入输出库函数外,也可对它们使用下面介绍的带文件指针的一般形式的输入输出库函数。如stdin,就是指从终端输入数据;stdout,就是向终端输出数据。 7.文件类型和文件类型指针变量 为了正确地完成文件读写,操作系统为每个正被程序使用的文件在内存中开辟一个存储区,用于存放有关对文件进行操作所需的控制信息(简称控制块)。如文件名、文件读写状态。文件缓冲区大小和位置、当前读写位置等。控制块是一个结构变量,其类型由系统预定义,取名为FILE,习惯称文件类型。程序通过指向该控制块的指针调用系统提供的文件处理库函数。 程序在使用文件前,先调用文件打开函数。打开函数为将要使用的文件指定一个FILE类型的结构变量,并返回该结构的指针。系统通过指向该结构的指针来引用结构中的文件控制信息,实现正确读写对应的文件。 程序要使用文件,就要定义FILE类型的指针变量(称文件指针变量)。例如: FILE * fp; 定义如是一个文件指针变量,它能指向前述类型为FILE的文件控制块结构变量。 8.文件打开库函数 fopen() 在读写文件之前,先得打开文件。打开文件可使用库函数fopen() 。调用函数fopen() 的一般形式为 fopen(文件名,使用方式) 其中文件名(可能还包括盘符和目录路径) 为字符串表达式。使用方式也是一个字符串,用来指明文件的读写方式。函数fopen() 将返回文件控制块结构变量指针,程序应将调用函数fopen(),返回的指针值赋给某个文件指针变量来保存。如语句 fp = fopen(“\\usr4\\smp.dat”,“r”); 以文件读方式打开根目录下的usr4子目录中的smp.dat文件。 调用函数fopen()时,可能会因某种原因不能打开文件。如读方式下打开一个不存在的文件;在写方式下,外部存储介质已无剩余的自由空间,或外设故障,或超过系统能同时打开的文件数;等等。文件不能打开时,函数fopen()将返回一个空指针值NULL。程序应考虑到文件不能正常打开的极端情况,所以常用以下形式的C代码描述打开一个文件的要求: if((fp =fopen( filename,“r”))==NULL) { printf(“Can not open %s file.\n”, filename); exit(0); /* 结束程序的执行,回到环境或操作系统 */ } 以上代码以读方式打开一个文件,其中filename是某文件名字符串表达式。上述代码在调用函数fopen()后立即检查打开是否成功,如果打开不成功,就在终端上输出该文件不能打开字样,调用exit函数。exit函数是系统提供的函数,该函数的执行将释放程序的全部资源,终止程序的执行。调用该函数时需指定一个整数,该整数将作为程序终止时给系统的一个返回值。若程序使用该函数,应在程序的头写上包含stdio.h头文件的预处理命令。 关于函数fopen()的使用方式参数,说明以下几点: (1)用“r”方式打开的文件只能用于从文件输入数据,不能用于输出;而且要求该文件已经存在,否则函数fopen() 返回NULL值。 (2)用“w”方式打开的文件只能用于向文件输出数据,不能用于输入。如打开时,原文件不存在,则新建立一个以指定名字命名的文件;如原文件已存在,则原文件上的数据被全部删除。 (3)如希望打开文件用于写,又不要删除原文件中的数据,并从原文件的末尾开始添加新的数据,应该用“a”方式打开。 (4)用“r+”、“w+”、“a+” 方式打开的文件可以输入数据,也可以输出数据。用“r+”方式只允许打开已存在的文件,以便程序能输入数据;用“w+”方式打开,则新建立一个文件,先是向文件输出数据,然后可以从该文件读人数据;用“a+”方式打开一个已存在的文件,位置指针先移到文件的末尾,准备添加数据,以后也可以输入数据。本新闻共 6页,当前在第 2页 1 2 3 4 5 6 |