C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方斌制作
C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方 斌 制作
第13章文件 13.1概述 13.5文件的定位 132文件类型指针136出错的检测 13文件的打开与关闭137文件输入输出小结 134文件的读写 本章要求与作业
第13章 文 件 13.1 概述 13.5 文件的定位 13.2 文件类型指针 13.6 出错的检测 13.3 文件的打开与关闭 13.7 文件输入输出小结 13.4 文件的读写 本章要求与作业
13.1概述 一、文件的概念 1、“文件(fe)":是记录在介质上的数据的集合,以文件名作为访问文 件的标识。 介质:一般是磁盘、磁带、光盘等。 2、内存文件:在内存中开辟一段空间,以文件的方式存放数据。如、 DOS虚拟磁盘驱动程序 RAMDRIVE SYS建立的虚拟磁盘上存放的文件。 Windows9X恢复盘也建立虛拟磁盘,用于临时存放系统命令文件。 3、操作系统把与主机关联的终端也当作文件处理,如 键盘:输入文件 显示器:输出文件 打印机:输出文件
13.1 概 述 一、文件的概念 1、“文件(file)”:是记录在介质上的数据的集合,以文件名作为访问文 件的标识。 介质:一般是磁盘、磁带、光盘等。 2、内存文件:在内存中开辟一段空间,以文件的方式存放数据。如、 DOS虚拟磁盘驱动程序RAMDRIVE.SYS建立的虚拟磁盘上存放的文件。 Windows9.X恢复盘也建立虚拟磁盘,用于临时存放系统命令文件。 3、操作系统把与主机关联的终端也当作文件处理,如: 键盘: 输入文件 显示器:输出文件 打印机:输出文件
4、C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流 ( strean)”,以字节为单位访问,没有记录的界限(实际存在界限,例 如,在FAT16文件系统中,文件的最大长度是2GB)。 5、按文件所依附的介质来分:有磁盘文件、磁带文件、内存文件、设备 文件等。 6、按文件的内容区分:有源程序文件、目标文件、数据文件等。 7、按文件中的数据组织形式来分:数据文件可分为ASCI码文件和二进 制文件。ASCI码文件,又称为“文本文件”(text),其每一个字节存放 一个ASCI码。 二进制文件,把内存中的数据按其在内存中的存储形式存放在磁盘上
4、C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流 (stream)” ,以字节为单位访问,没有记录的界限(实际存在界限,例 如,在FAT16文件系统中,文件的最大长度是2GB)。 5、按文件所依附的介质来分:有磁盘文件、磁带文件、内存文件、设备 文件等。 6、按文件的内容区分:有源程序文件、目标文件、数据文件等。 7、按文件中的数据组织形式来分:数据文件可分为ASCII码文件和二进 制文件。ASCII码文件,又称为“文本文件”(text),其每一个字节存放 一个ASCII码。 二进制文件,把内存中的数据按其在内存中的存储形式存放在磁盘上
二、文件分类 可以从不同的角度对文件进行分类: 1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分 为源文件、目标文件和可执行文件。 (2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。 (3)根据文件的存储形式,可分为ASCI1文件和二进制文件。 ASCI码文件的每1个字节存储1个字符,因而便于对字符进行逐个处 理。但一般占用存储空间较多,而且要花费转换时间(二进制与 ASCII 码之间的转换)。 二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储 空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形 式
二、文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分 为源文件、目标文件和可执行文件。 (2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。 (3)根据文件的存储形式,可分为ASCII码文件和二进制文件。 ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处 理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII 码之间的转换)。 二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储 空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形 式
例、十进制整数10000, 在内存中占两字节,其存放形式是:0010,0111,0001,0000 在二进制文件中也按这中方式存放。 在ASCI文件中,存放为31H、30H、30H、30H、30H,占五个字节, 它们分别是1、0、0、0、0、0字母的ASCI码。 4△ 内存中的存放形式 00100111100010000 十进制整数 10000 二进制文件中的存放形式 0010011100010000 ASCI码文件中的存放形式 00110001100110000001100000011000000110000 0x31 0x30 0x30 0x300x30
例、十进制整数10000, 在内存中占两字节,其存放形式是:0010,0111,0001,0000。 在二进制文件中也按这中方式存放。 在ASCII文件中,存放为31H、30H、30H、30H、30H,占五个字节, 它们分别是1、0、0、0、0、0字母的ASCII码
8、按照操作系统对磁盘文件的读写方式,文件可以分为“缓冲文件系 统”和“非缓冲文件系统”。 缓冲文件系统:操作系统在內存中为每一个正在使用的文件开辟一个读 写缓冲区。 内存 输出文件缓冲区」输出磁盘 程序数据 输出 输入输文件缓冲区输入 非缓冲文件系统:操作系统不开辟读写缓冲区
8、按照操作系统对磁盘文件的读写方式,文件可以分为“缓冲文件系 统”和“非缓冲文件系统”。 缓冲文件系统:操作系统在内存中为每一个正在使用的文件开辟一个读 写缓冲区。 非缓冲文件系统:操作系统不开辟读写缓冲区
ANSI C的缓冲文件系统 所谓缓冲文件系统是指,系统自动地在内存区为每个正 在使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时,必须首先输出到缓冲区中。 待缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内存读入数据时,则正好相反:首先将一 批数据读入到缓冲区中,再从缓冲区中将数据逐个送到 程序数据区
ANSI C的缓冲文件系统 所谓缓冲文件系统是指,系统自动地在内存区为每个正 在使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时,必须首先输出到缓冲区中。 待缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内存读入数据时,则正好相反:首先将一 批数据读入到缓冲区中,再从缓冲区中将数据逐个送到 程序数据区
13.2文件类型指针 口要调用一个文件,需要有以下的信息: 文件当前的读写位置 ◎与该文件对应的内存缓冲区的地址 缓冲区中未被处理的字符串 9文件操作方式等 缓冲文件系统会为每一个文件系统开辟一个“文件信息区”,在 stdio. h 中,它被定义为FILE类型数据,用于存放文件的有关信息(如文件名、 文件位置等) 注意:结构类型名“FILE"必须大写
要调用一个文件,需要有以下的信息: 13.2 文件类型指针 文件当前的读写位置 与该文件对应的内存缓冲区的地址 缓冲区中未被处理的字符串 文件操作方式等 缓冲文件系统会为每一个文件系统开辟一个“文件信息区”,在stdio.h 中,它被定义为FILE类型数据,用于存放文件的有关信息(如文件名、 文件位置等) 注意:结构类型名“FILE”必须大写
typedef struct { int fd r /*文件号* int cleft;/*缓冲区中剩下的字节数*/ int mode;/*文件操作模式*/ char* nextc;/*下一个字节的位置* char*buf;/*文件缓冲区位置*/ SFILE 其中:每个成员就是用来存放有关文件的各种信息的数据项 定义文件指针变量的一般形式为: FILE*文件结构指针变量名 例如、FILE*fp; 注意:只有通过文件指针,才能调用相应的文件
typedef struct { int _fd; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字节数 */ int _mode; /* 文件操作模式 */ char * _nextc; /* 下一个字节的位置 */ char * _buff; /*文件缓冲区位置 */ }FILE; 其中:每个成员就是用来存放有关文件的各种信息的数据项。 定义文件指针变量的一般形式为: FILE *文件结构指针变量名 例如、FILE *fp; 注意:只有通过文件指针,才能调用相应的文件