
第10章对文件的输入输出
10 对 文 件 的 输 入 输 出 第 章

C文件的有关基本知识
C文件的有关基本知识

什么是文件文件有不同的类型,在程序设计中,主要用到两种文件:(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obi)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数据等。为了简化用户对输入输出设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各种设备都统一作为文件来处理。从操作系统的角度看,每一个与主机相连的输入输出设备都看作一个文件。例如,终端键盘是输入文件,显示屏和打印机是输出文件
文件有不同的类型,在程序设计中,主要用到两种文件: (1) 程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件 的内容是程序代码。 (2) 数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘 (或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数 据等。 为了简化用户对输入输出设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各 种设备都统一作为文件来处理。从操作系统的角度看,每一个与主机相连的输入输出设备都看作一个文 件。例如,终端键盘是输入文件,显示屏和打印机是输出文件。 什么是文件

什么是文件文件(file)一般指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream):即数据流。流表示了信息从源到目的端的流动。在输入操作时,数据从文件流向计算机内存在输出操作时,数据从计算机流向文件(如打印机、磁盘文件)。C语言把文件看作一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组成。一个输入输出流就是一个字符流或字节(内容为二进制数据)流。C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。这种文件称为流式文件
文件(file)一般指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。 输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流 (stream),即数据流。流表示了信息从源到目的端的流动。在输入操作时,数据从文件流向计算机内存, 在输出操作时,数据从计算机流向文件(如打印机、磁盘文件)。 C语言把文件看作一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组成。一个输入输 出流就是一个字符流或字节(内容为二进制数据)流。 C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对 文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号 (如回车换行符)控制,这就增加了处理的灵活性。这种文件称为流式文件。 什么是文件

文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。D:ICCltempfilel.dat文件标识包括3部分:(1)文件路径:(2)文件名主干;(3)文件后缀。+文件路径文件主干名文件后级·文件路径表示文件在外部存储设备中的位置。。文件名主干的命名规则遵循标识符的命名规则。文件后缀用来表示文件的性质。为方便起见,文件标识常被称为文件名,但应了解此时所称的文件名,实际上包括以上3部分内容,而不仅是文件名主干
一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件标识包括3部分: (1)文件路径; (2)文件名主干; (3)文件后缀。 • 文件路径表示文件在外部存储设备中的位置。 • 文件名主干的命名规则遵循标识符的命名规则。 • 文件后缀用来表示文件的性质。 为方便起见,文件标识常被称为文件名,但应了解此时所称的文件名,实际上包括以上3部分内容,而 不仅是文件名主干。 文件名 D:\CC\temp\file1.dat ↓ ↓ ↓ 文件路径 文件主干名 文件后缀

文件的分类根据数据的组织形式,数据文件可分为ASC文件和二进制文件。数据在内存中是以二进制形式存储的如果不加转换地输出到外存,就是二进制文件,可以认为它就是存储在内存的数据的映像,所以也称之为映像文件(imagefile)。如果要求在外存上以ASCll代码形式存储,则需要在存储前进行转换。ASCll文件又称文本文件(textfile),每一个字节存放一个字符的ASCll代码。字符一律以ASCI形式存储,数值型数据既可以用ASCII形式存储,也可以用二进制形式存储。ASClI形式0011000100110000001100000011000000110000内存中存储形式(0)(0)(0)(1)(0)00000000000000000010011100010000二进制形式00000000000000000010011100010000用ASCII码形式输出时字节与字符一一对应,一个字节代表一个字符,因而便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间(二进制形式与ASCII码间的转换)。用二进制形式输出数值,可以节省外存空间和转换时间,把内存中的存储单元中的内容原封不动地输出到磁盘(或其他外部介质)上,此时每一个字节并不一定代表一个字符
根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。数据在内存中是以二进制形式存储的, 如果不加转换地输出到外存,就是二进制文件,可以认为它就是存储在内存的数据的映像,所以也称之 为映像文件(image file)。如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换。ASCII文件 又称文本文件(text file),每一个字节存放一个字符的ASCII代码。 字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以用二进制形式存储。 用ASCII码形式输出时字节与字符一一对应,一个字节代表一个字符,因而便于对字符进行逐个处理,也 便于输出字符。但一般占存储空间较多,而且要花费转换时间(二进制形式与ASCII码间的转换)。用二 进制形式输出数值,可以节省外存空间和转换时间,把内存中的存储单元中的内容原封不动地输出到磁 盘(或其他外部介质)上,此时每一个字节并不一定代表一个字符。 文件的分类 ASCII形式 00110001 00110000 00110000 00110000 00110000 内存中存储形式 (1) (0) (0) (0) (0) 00000000 00000000 00100111 00010000 二进制形式 00000000 00000000 00100111 00010000

文件缓冲区ANSIC标准采用缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。这样做是为了节省存取时间,提高效率,缓冲区的大小由各个具体的C编译系统确定。输出文件缓冲区磁盘输出程序数据区输出输入输入文件缓冲区输入说明:每一个文件在内存中只有一个缓冲区,在向文件输出数据时,它就作为输出缓冲区,在从文件输入数据时,它就作为输入缓冲区
ANSI C标准采用 “缓冲文件系统 ”处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中 每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满 缓冲区后才一起送到磁盘去。如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存 缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。这样做是为了 节省存取时间,提高效率,缓冲区的大小由各个具体的C编译系统确定。 说明: 每一个文件在内存中只有一个缓冲区,在向文件输出数据时,它就作为输出缓冲区,在从文件输 入数据时,它就作为输入缓冲区。 文件缓冲区 输出文件缓冲区 程序数据区 输入文件缓冲区 磁 盘 输出 输入 输出 输入

文件类型指针缓冲文件系统中,关键的概念是文件类型指针”,简称文件指针”。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE。typedef struct/缓冲区“满”或“空”的程度short level;//文件状态标志unsignedflags//文件描述符char fd;unsigned char hold;/如缓冲区无内容不读取字符缓冲区的大小shortbsize:1/数据缓冲区的位置unsignedchar*buffer;/文件位置标记指针当前的指向unsigned char*curp;//临时文件指示器unsignedistemp;/用于有效性检查shorttoken;JFILE;一种C编译环境提供的stdio.h头文件中有以下的文件类型声明
文件类型指针 缓冲文件系统中,关键的概念是 “文件类型指针 ”,简称 “文件指针 ”。每个被使用的文件都在内存中 开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。 这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE。 typedef struct { short level; //缓冲区“满”或“空”的程度 unsigned flags; //文件状态标志 char fd; //文件描述符 unsigned char hold; //如缓冲区无内容不读取字符 short bsize; //缓冲区的大小 unsigned char*buffer; //数据缓冲区的位置 unsigned char*curp; //文件位置标记指针当前的指向 unsigned istemp; //临时文件指示器 short token; //用于有效性检查 }FILE; 一种C编译环境提供的stdio.h头文件中有以下的文件类型声明

文件类型指针fp1fp2fp3FILE *fp://定义一个指向FILE类型数据的指针变量可以使fp指向某一个文件的文件信息区是一个结构体变量),通过该文件信息区中的信息就能够访问该文件。也就是文件f1的文文件f2的文文件f3的文说,通过文件指针变量能够找到与它关件信息区件信息区件信息区联的文件。如果有n个文件,应设n个指针变量,分别指向n个FILE类型变量,以注意指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是实现对n个文件的访问。为方便起见,通指向内存中的文件信息区的开头。常将这种指向文件信息区的指针变量简称为指向文件的指针变量
文件类型指针 FILE *fp; //定义一个指向FILE类型数据的指针变量 可以使fp指向某一个文件的文件信息区 (是一个结构体变量),通过该文件信息 区中的信息就能够访问该文件。也就是 说,通过文件指针变量能够找到与它关 联的文件。如果有n个文件,应设n个指 针变量,分别指向n个FILE类型变量,以 实现对n个文件的访问。为方便起见,通 常将这种指向文件信息区的指针变量简 称为指向文件的指针变量。 fp1 文件f1的文 件信息区 fp2 文件f2的文 件信息区 fp3 文件f3的文 件信息区 注意 • 指向文件的指针变量并不是指向外 部介质上的数据文件的开头,而是 指向内存中的文件信息区的开头

打开与关闭文件
打开与关闭文件