当前位置:
文档之家› C及C++程序设计第13章-磁盘文件操作(IO系统)
C及C++程序设计第13章-磁盘文件操作(IO系统)
顺序文件是按照数据存储的顺序连续 地处理(读或写)每一个数据。为了处理 文件中某个数据,必须从文件的第一个数 据开始,顺序取完指定数据前所有的数据, 才能处理该数据。
随机文件处理数据时,可以在文件中 任意指定的位置读写数据。
13.1.4 缓冲文件系统和非缓冲 文件系统
按系统对文件的支持方式的不同,分 为缓冲文件系统和非缓冲文件系统。C语 言支持这两种文件系统。
第13章 磁盘文件操作(I/O系统)
13.1
文件概述Biblioteka 13.2打开文件和关闭文件
13.3
文件的读和写
文件的定位与文件的随机存取
13.4
13.5
小结
13.1 文 件 概 述
13.1.1 C语言文件的概念
文件(file)是存储在外部介质(如磁 盘,磁带)上的,以惟一的名字作为标记 的数据集合。操作系统是以文件为单位对 数据进行管理的。
这里形式参数文件型指针变量fp是调 用函数fopen()打开文件时返回的文件型指 针。函数的功能是,关闭fp指向的文件, 释放分配给文件的内存缓冲区。
当文件打开用于写时,在关闭时,把 暂时存在缓冲区的内容写到文件中去,然 后,释放文件的缓冲区。 当正确关闭指定的文件时,函数返回0; 否则返回非0。
文件数据的存储,一般有两种形式。 一种是以ASCII码的形式按字节存储的。 这样的文件叫做文本文件(text file),又 叫ASCII文件。另一种是以在内存中的二 进制数形式存储的文件,称为二进制文件。
13.1.3 顺序文件和随机文件
按照文件内数据处理方式的不同,文 件又分为顺序文件和随机文件。
程序使用文件,首先必须定义一个 FILE型结构的指针变量。这个指向FILE 结构型的指针称为文件型指针。通过这个 指针可以实现对文件的操作。
定义文件指针变量的一般形式为: FILE *文件型指针名; 可以同时定义多个文件型指针。
13.2 打开文件和关闭文件
打开文件的意思是使定义的文件型指 针指向打开的文件,包括为文件型变量分 配内存空间,在内存为文件建立缓冲区, 将文件和缓冲区的相关信息写入文件型变 量的各成员中。
所谓缓冲文件系统(buffered file system)是指在进行I/O操作时,系统自动 为每个打开的文件开辟一个内存缓冲区。
采用缓冲区的目的是,匹配快速的 CPU和慢速的磁盘操作,提高CPU的工作 效率,减少访问磁盘的次数。图13-1所示 给出缓冲文件系统的示意图。
数据区 写 内存程序数据区 读 内存缓冲区 读 写 外存
与主机相连的输入输出设备,其作用 也是从设备上读取数据和将数据写到设备 上,所以,也把输入输出设备看作是文件。
给每个文件起一个名字。完整的磁盘 文件名的组成如下: 盘符:路径\(基本)文件名.扩展名 操作系统支持对文件的各项管理,文 件的命名应符合操作系统的规定。
文件操作的主要有两个,一是从文件 取出数据存入内存变量中,这就是文件的 读操作。二是将内存变量中存放的数据存 放到文件中,这就是文件写操作。统称为 文件的I/O操作。
此函数也定义在头文件stdio.h中。
13.2.3 标准设备文件
系统规定,标准输入设备为键盘,标 准输出设备为显示器。 当程序运行时,系统自动打开标准设 备文件,分配文件号。当程序运行结束时, 系统又自动将这些标准设备文件关闭。
程序运行时,系统共打开五个标准设 备文件,表13-2列出来这些标准设备文件 的文件名,文件号和文件指针。用户程序 可以像使用一般文件指针那样直接使用这 些设备的指针,而不需要打开和关闭操作。
这些信息存放在一个结构型变量中。 这个结构类型是系统定义的,并通过 typedef将该结构型起名为FILE。FILE结 构型定义在stdio.h文件中。
其定义如下: typedef struct {
int _fd; int _cleft; int _mode; char *nextc; char *buff; }FILE;
图13-1 数据通过缓冲区读取示意图
所谓非缓冲文件系统(unbuffered file system)是指系统不自动开辟内存缓冲区, 而是由程序自己为每个文件设定缓冲区。
13.1.5 文件型指针
在ANSI文件I/O系统中,每个被使用 的文件,都在内存开辟一个区,用于存放 与文件相关的信息,如文件号(文件在操 作系统中被管理的代号),文件的读写状 态,文件缓冲区的地址,以及当前的读写 缓冲区数据的位置等。
由于文件是受操作系统管理的,应用 程序使用某一文件时,它需要向操作系统 提出建立与文件的联系;使用结束时,通 知操作系统切断与文件的联系。这是两个 过程,前者称为打开文件,后者称为关闭 文件。
在C语言中,文件的打开与关闭,文 件的读操作与写操作,都是由C语言提供 的系统函数完成的。
13.1.2 二进制文件和文本文件
如果打开文件操作不成功(出错), 函数返回空指针(“NULL”),其值为0。 因此,打开文件时,一般要对返回值进行 判断,以便知道文件是否被成功打开。如 果没打开,就不能使用这个文件。
函数fopen()定义在头文件stdio.h。
13.2.2 关闭文件函数
关闭文件函数fclose()的格式是: int fclose(FILE *fp)
文件使用完后,系统将缓冲区中的数 据做相应的处理(如将数据写入文件等), 然后,释放缓冲区。这个过程叫做关闭文 件。
13.2.1 打开文件函数
打开文件函数fopen()的格式为: FILE *fopen(char *filename, char *mode)
其中参数filename是字符型指针,它指 向的字符串是要打开的文件名。参数mode 也是字符型指针,它指向的字符串是文件 的使用方式,称为打开模式。
文件的使用方式字符串共有12个,其 中6个是用于文本文件的,6个用于二进制 文件的。这些字符串及其功能如表13-1所 示。
fopen()函数的功能是,以mode方式打 开filename指定的文件,自动为该文件分 配一个内存缓冲区。
如果正确打开文件,函数返回一个指 向文件型变量的地址。用户可以用自己定 义的文件型指针接受这个地址。此后,便 可利用这个文件型指针对文件进行读写操 作。