C语言(第12章)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据区
a 文件输入
缓冲区
磁盘文件
数据区
a
文件输出
磁盘文件
缓冲区
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
设置输入输出缓冲区目的是:减少对磁盘的实际读 写次数,提高输入输出操作的效率。磁盘访问最小 只能以扇区为单位,且其读写速度远远低于读写内 存的速度。
缓冲文件系统自动为文件设置所需的缓冲区,缓冲 区的大小随机器和操作系统而异。
文件(FILE)类型指针
FILE类源自文库的结构体变量不用变量名来标识,而要设置 一个指向该结构体变量的指针变量(文件指针),通过它 来访问该结构体变量。
教学内容
文件系统概述 文件的打开与关闭 文件的顺序读写 文件的定位与随机读写 文件操作的出错检测 非缓冲文件系统(系统级I/O)
§12.1 文件系统概述
文件的概念
“文件”是指记录在外部介质上的数据的集合。例如 用编辑程序编好的一个. c源程序是一个文件,编译后 生成的.obj,连接后生成的.exe等也是文件,把它们存放 到磁盘上就是一个磁盘文件。
非缓冲(低层)文件系统:
非缓冲系统直接依赖于操作系统,通过操作系统的 功能直接对文件进行操作。所以它称为“系统输入 输出”或“低层输入输出”系统。
非缓冲区文件系统不自动设置缓冲区,而要由用户 自己根据需要设置。
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
这两种文件系统分别使用不同的输入输出函数。其各 自的特点如下: 缓冲文件系统:由系统代替用户做了许多事情,功 能强、使用方便。 非缓冲文件系统:通过操作系统的功能直接对文件 进行操作,依赖于操作系统,编程序时需要人们熟 悉操作系统,编程难度大一些,但它的执行效率高, 节省内存。
为方便起见,一般把缓冲文件系统输入输出称为标准 输入输出(标准I/O),非缓冲文件系统的输入输出称为 系统级输入输出(系统I/O)。
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
标准I/O提供4种读写文件的方法,C语言中相对应的函 数是:
读写一个字符:
用fgetc和fputc函数;
{
定义的新类型名。
...... (结构体成员项,用来存放文件信息)
} FILE;
文件(FILE)类型指针
定义文件类型指针变量的一般形式为:
FILE *文件结构体指针变量名;
例如: FILE *fpl,*fp2,*fp3; 上例定义了三个指针变量fpl,fp2,fp3,它们都是指
向FILE类型结构体数据的指针变量,但此时它们还未 具体指向哪一个结构体变量;FILE类型的结构体变量 在执行打开文件的函数时才生成,并由该函数返回其 起始地址,并在执行关闭文件的函数后释放。
广义地说,所有输入输出设备都是文件,例如打印机 文件、卡片文件、磁带文件等。计算机以这些设备为 对象进行输人输出时,对这些设备的处理方法统一按 “文件”处理。
§12.1 文件系统概述
文件可以从不同的角度进行分类: 按文件所依附的介质来分:有卡片文件、纸带 文件、磁带文件、磁盘文件等。 按文件的内容区分:有源程序、目标文件、可 执行程序文件、数据文件等。 按文件中数据的组织形式区分:数据文件可分 为字符代码文件(也称字符文件或文本文件或 正文文件)和二进制文件。
读写一个字符串: 用fgets和fputs函数;
格式化读写:
用fscanf和fprintf函数;
按“记录”读写: 用fread和fwfite函数。
系统I/O(非缓冲系统)不提供前面3种功能的函数,只提 供第4种函数:
按“记录”读写:用read和write函数。
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
缓冲(高层)文件系统:为程序中每一个打开的文件
在内存中开辟一个“缓冲区”。
从磁盘文件读入数据时,数据先送到“输入缓冲区” 中,然后再从缓冲区依次将数据送给接收变量;
向磁盘文件输出数据时,先将程序中变量或表达式 的值送到“输出缓冲区”中,待装满缓冲区后才一 起写道磁盘文件。
表12.1 标准I/O函数与终端I/O函数对照
标准I/O函数 终端I/O函数
作用
fgetc
getchar
输入一个字符
fputc
putchar
输出一个字符
fgets
gets
输入一个字符串
fputs
puts
输出一个字符串
fscanf
scanf
按指定格式输入若干变量的值
fprintf
printf
按指定格式输出若干数据
文件(FILE)类型指针
要调用一个文件,需要有以下的信息:文件当前的读写位 置;与该文件对应的内存缓冲区的地址;缓冲区中未被处 理的字符数;文件操作方式等。
缓存个必typ冲放结自ed文以构己e件上体再f s系这变去tru统些量定ct为信。义每息这。一。个其请变文这结形注量件个构式意名开“体为,,辟文变:F由(个版包F它IL数本系一件量I括EL是的、中统E个信是结用不定成不事“息由构t是义员同先y文区系体p结在作。指中件”统es构用定d成t信在定de等的体员i息内义fo。).名在h区存的它头、不”中,的文成同,,用定件员的用是户义中C来一不,
第十二章 文 件
到目前为止我们设计的程序只能从键盘输入 数据,将处理结果显示在屏幕上,程序结束 后这些数据都无法存留;
实际应用中,常需要输入大量的数据,处理 的结果也需要存留下来,以便查询;
文件是存储在外部介质上的数据集合,C语言 可以从文件中读取数据处理,也可以将内存 中的处理结果(数据)写到文件中。
字符文件与二进制文件
字符代码文件是指文件的内容是由一个一个字符组成的, 每一个字符用一个代码表示,一般用ASCII代码。例如一 个实数136.56,共有6个字符,如果按字符代码形式 (ASCII码)输出到磁盘上,一个字符占一个字节,故共占6 个字节。
二进制文件是指以数据在内存中存储形式原样输出到磁盘 上去,例如136.56在内存中以浮点形式存储,占4个字节, 而不是6个字节。若以二进制形式输出此数,就将该4个字 节按原来在内存的存储形式送到磁盘上去。不管一个实数 数值多大,都占4个字节。