文件的输入与输出精品文档
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
/*标准出错设备----显示器 */
…
#define stdaux (&_streams[3])
/*标准辅助设备 */
#define stdprn (&_streams[4])
OPEN_MAX-1
/*标准s打td印in设称备为*/ 标准输入文件,stdout称为标准输出文件 。
2019/10/14
华中科技大学计算机学院
3
C语言程序设计-第11章 文件的输 入与输出
11.1 文件概述 11.2 FILE指针和标准流式文件 11.3 流式文件的顺序输入输出 11.4 流式文件的随机输入输出 11.5 其它文件操作函数 11.6 输入输出的低层接口 11.7 流式文件系统中库函数的设计
2019/10/14
Test.c
main(){ printf(“hi”);
}
m a i n ( ) { \n p r i n t f ( “ h i ” ) ; \n} \n EOF
文件数据区
文本文件存储示意图
这种格式的文件称为文本文件、行文文 件、正文文件或纯文本文件。
文本文件是以字符序列形式存储数据的 文件。
2019/10/14
2019/10/14
华中科技大学计算机学院
9
11.1 文件概述
当将内存多个数据写入文本文件的时 候,特别注意的是:在两个数据之间增加 必的间隔符。
目的在于读文本文件时,能够保证获 得数据转换的正确性。
例如,int x=128,y=821; ‘1‘’2‘’8‘’8‘’2‘’1’ 128821 ‘1‘’2‘’8‘’‘’8‘’2‘’1’ 128
二进制文件存储示意图
2019/10/14
华中科技大学计算机学院
12
11.1 文件概述
如果将内存数据按二进制文件存储在 外存中,则C 语言不需要转换,直接按内 存数据形式存储。
例如,int x=128; x
内存: 0000 00001000 0000
write
外存: 0000 00001000 0000
华中科技大学计算机学院
29
11.2 FILE指针和标准流式文件
系统自动打开标准文件,stdin定向到 键盘,stdout和stderr定向到显示器。
getchar、gets和scanf函数是从stdin 文件读数据;putchar、puts和printf函数 则是向stdout 文件写数据。
freopen函数或fwide函数,可以重定向 stdin和stdout。如,定向到磁盘文件。
写指针。数据不必从文件头到文件尾顺序读
写。
Data1 Data2 Data3 Data4
…
Datan-1 Datan
move
read mreoavde read rreeaadd move
read
提示:随机读写方式,需要按二进制格式打开文件!
2019/10/14
华中科技大学计算机学院
19
11.1 文件概述
2019/10/14
华中科技大学计算机学院
10
11.1 文件概述
Test.c
main(){ printf(“hi”);
}
m a i n ( ) { \n p r i n t f ( “ h i ” ) ; \n} \n EOF
文件数据区
文本文件存储示意图
C 语言是将键盘、显示器和打印机设备 视同为文本文件进行处理的。
华中科技大学计算机学院
24
11.2 FILE指针和标准流式文件
FILE是C语言标准中定义的一种结构类 型名称。 C语言标准规定FILE类型的结构变 量应该能够记载关于流的控制方面的全部信 息。
不同的 C编译器关于FILE结构类型的定 义会略有差异,但提供的库函数原型都是满 足C语言标准。
2019/10/14
华中科技大学计算机学院
15
11.1 文件概述
C语言中,对文件的读写方式有两种: 顺序读写和随机读写。
‘1’
‘2’
‘a’
… 001100010011001001100001 …
读写
读写
之前
之后
‘1’
按文本格式,读入1个char数据:
00110001
2019/10/14
华中科技大学计算机学院
16
11.1 文件概述
《C 语言程序设计》
华中科技大学计算机科学与技术学院 C语言程序设计课程组 曹计昌 卢 萍 李 开 张茂元 祝建华 周时阳 制作
2019/10/14
华中科技大学计算机学院
1
C语言程序设计-第11章 文件的
输入与输出
本章讨论关于计算机的存储器与I/O设备 之间数据交换的程序设计问题。
运算器 输
入
设
存储器
备
控制器
数据线
地址线
计算机组成原理图
输 出 设 备
控制线
2019/10/14
华中科技大学计算机学院
2
C语言程序设计-第11章 文件的输
入与输出
I/O设备
硬盘(I/O)√ 软盘(I/O) 外部存储器 光盘(O或I/O)
U…盘(I/O)
显示器(O)√ 打印机(O)√ 键盘(I)√ …
2019/10/14
华中科技大学计算机学院
20
11.1 文件概述
C语言标准I/O函数是基于“流”的概 念实现的。
流是从源点到终点方向流动的数据。
概念上,文件是“存储”在I/O设备上 的数据的抽象;流是内存与I/O设备之间流 动的数据的抽象。实现时,流存储在I/O缓 冲区中。
2019/10/14
华中科技大学计算机学院
21
⊔
11.1 文件概述
程 C语序言员:: 统 实一 现对字符流和BIT流操↔特作性;
I差/O异设的备I/特O设性备差之异间是的透转明换的。。
输入流
内存
流
I/O缓冲区
文件
I/O设备
输入流
C语言标准I/O函数实现模型
提示:C语言标准I/O函数都是基于I/O流操作!对应的文 件称为流式文件。
2019/10/14
华中科技大学计算机学院
4
11.1 文件概述ຫໍສະໝຸດ 基于操作系统的软件系统是将一组应用
相关的数据构成一个逻辑单位,存储在外部
存储器之中的。这个逻辑单位被称为文件,
以文件名加以标识。 文件头
文件尾
F1.TXT
Hello! …
文件目录区
文件数据区
外部存储器存储空间组织示意图
2019/10/14
华中科技大学计算机学院
华中科技大学计算机学院
22
11.1 文件概述
底层 I / O 接口函数是非缓冲形式的,涉 及的文件称为非流式文件,即使是单个字符 或字节的I/O操作也会引起外部设备的I/O动 作。
在非流式文件中,程序通过文件描述符 (文件描述字或文件句柄)对文件进行I/O 操作,文件描述符是由操作系统分配提供的 一个整型数。
5
11.1 文件概述
文件是指内存以外介质上以某种形式组 织起来的数据集合。
在C 语言中,文件中的数据分为两种数 据格式存储。
第一类文本格式:将文件数据区的每个 字节解释为一个字符,回车符‘\n’ 解释 为行结束标志(回车符之间的符号串称为一 行)。
2019/10/14
华中科技大学计算机学院
6
11.1 文件概述
2019/10/14
华中科技大学计算机学院
14
11.1 文件概述
C语言中,对文件的读写方式有两种: 顺序读写和随机读写。
‘1’
‘2’
‘a’
… 001100010011001001100001 …
读写 之前
读写
之后
12
按文本格式,读入1个int数据:
00000000 00001100
2019/10/14
bsize; /* 缓冲区大小 */
unsigned char *buffer; /* 指向缓冲区指针 */
unsigned char *curp; /* 当前读写位置指针*/
unsigned
istemp; /* 临时文件描述符 */
short
token; /* 有效性检验标志 */
} FILE;
/* 结构类型命名 */
2019/10/14
华中科技大学计算机学院
13
11.1 文件概述
如果将存储在外存中二进制文件的数据 取回内存,则C 语言不需要转换,直接取回 即可,其数值由内存单元的数据类型确定。
例如,int x=128; x
内存: 0000 00001000 0000
read
外存: 0000 00001000 0000
2019/10/14
华中科技大学计算机学院
30
11.3 流式文件的顺序输入输出
1.打开文件函数fopen()
11.2 FILE指针和标准流式文件
#define stdin (&_streams[0]) _streams
/*标准输入设备,通常是键盘 */
0
#define stdout (&_streams[1])
1
/*标准输出设备,通常是显示器 */
2
3
#define stderr (&_streams[2])
Data1 Data2 Data3 Data4
…
Datan-1 Datan
提示:Datai的划分,取决于读写数据格式和读写方式!
2019/10/14
华中科技大学计算机学院
18
11.1 文件概述
随机读写方式:打开文件时,读写指针
指向文件头;读写一个“数据”后,读写指
针自动指向下一个“数据”;程序能改变读
C语言文件输入输出的实现方法: (1)标准I/O 调用编译系统提供的关于 文件输入输出的标准库函数来实现; (2)底层I/O 调用操作系统提供的关于 文件输入输出的底层接口函数来实现。
提示:C语言提供的标准I/O函数库中的每个函数都是 基于操作系统提供的底层I/O接口函数实现的!
2019/10/14
C语言中,对文件的读写方式有两种: 顺序读写和随机读写。
‘1’
‘2’
‘a’
… 001100010011001001100001 …
读写 之前
读写 之后
12594
按二进制格式,读入1个int数据:
00110001 00110010
2019/10/14
华中科技大学计算机学院
17
11.1 文件概述
顺序读写方式:打开文件时,读写指针 指向文件头;读写一个“数据”后,读写指 针自动指向下一个“数据”;程序无法修改 读写指针。数据必须是从文件头到文件尾, 顺序读写。
2019/10/14
华中科技大学计算机学院
8
11.1 文件概述
读文
件
如果将存储在外存中的文本文件数据
取回到内存,则C 语言通常需要将按指定
格式转换成内存数据形式。
例如,int x=128; 转换格式: “内%存d”: x 0000 00001000 0000
外存: 0011 00010011 0010 00111000 ‘1’ ‘2’ ‘8’
#define OPEN_MAX 20
2019/10/14
华中科技大学计算机学院
27
11.2 FILE指针和标准流式文件
程序中仅使用FILE* 型变量,通常简称 为FILE指针。
_streams
0
1
FILE * fp;
2
3
fp
…
i
…
2019/10/14
华中科技大学计算机学院
OPEN_MAX-1
28
华中科技大学计算机学院
25
11.2 FILE指针和标准流式文件
typedef struct {
short
level; /* 缓冲区空满 */
unsigned
flags; /* 文件状态标志 */
char
fd;
/* 文件描述符 */
unsigned char hold; /* 非缓冲回送字符 */
short
对于输出设备显示器和打印机,遇到输 出回车符时,便换行显示或打印。
2019/10/14
华中科技大学计算机学院
11
11.1 文件概述
第二类二进制格式:文件数据区仅按每 个二进制位解释为0或1。
这种格式的文件称为二进制文件。 二进制文件是以二进制数字01序列形式 存储数据的文件。
0000 00001000 0000 0000 00001000 0000
华中科技大学计算机学院
7
11.1 文件概述
写文
件
如果将内存数据按文本文件存储到外
存中,则C 语言通常需要将内存数据按指
定格式转换成字符形式。
例如,int x=128; 转换格式: “内%存d”: x 0000 00001000 0000
外存: 0011 0001 0011 0010 01110000 ‘1’ ‘2’ ‘8’
2019/10/14
华中科技大学计算机学院
26
11.2 FILE指针和标准流式文件
FILE类型的结构变量_streams[]是在头 文件stdio.h中定义的,由系统创建、赋值 和更新。
extern FILE _Cdecl _streams[];
_streams[] 的个数是可以同时打开的文 件数目,由系统宏定义。
2019/10/14
华中科技大学计算机学院
23
11.1 文件概述
文件操作的步骤都是: 第一,打开文件——建立文件指针或文 件描述符与文件间联系; 第二,对文件进行读写操作; 第三,关闭文件——取消文件指针或文 件描述符与文件间联系。
提示:打开文件时,确定了文件读写格式和读写方式!
2019/10/14