C语言本身未提供有关文件操作的输入输出语句,但对文件的打开、关闭和读写操作都可用系统提供的库函数来实现。程序可用它们对文件作各种复杂的处理。 6.设备文件 系统将常规设备上的输入输出数据流称为标准文件,程序运行前,系统自动打开这些标准文件。它们是标准输入文件、标准输出文件、标准出错输出文件和标准打印输出文件。系统自动定义了这些标准文件的文件指针,它们依次是stdin、stdout、stderr和stdprn,供程序直接使用。 程序除能直接使用前面各章都使用的不带文件指针的标准输入输出库函数外,也可对它们使用下面介绍的带文件指针的一般形式的输入输出库函数。如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头文件的预处理命令。
|