




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第十章第十章 标准输入输出库标准输入输出库 2关于标准关于标准I/O库库3主要内容主要内容 标准标准I/O的基本概念的基本概念 流流 缓存缓存 标准输入、标准输出及标准错误输出标准输入、标准输出及标准错误输出 使用标准使用标准I/O进行文件操作进行文件操作 流文件的开关方式流文件的开关方式 单字符方式读写单字符方式读写 行方式读写行方式读写 二进制方式读写二进制方式读写 格式化输入格式化输入/输出输出4引入引入 Linux系统下的文件操作有两种方式:系统下的文件操作有两种方式:直接调用文件操作的系统调用(直接调用文件操作的系统调用(API方式)方式)标准输入输出方式(标准标准输入输出方式(标
2、准I/O) 标准标准I/O库是于库是于1975年左右编写完成的,是用于处理流和文件的一年左右编写完成的,是用于处理流和文件的一个库个库. 标准标准I/O库可以在很多操作系统下移植。库可以在很多操作系统下移植。 基本基本I/O是针对文件描述符的,而标准是针对文件描述符的,而标准I/O是基于流的。是基于流的。 当通过标准当通过标准I/O打开或者创建文件的时候,系统使用一个流和文件打开或者创建文件的时候,系统使用一个流和文件相关联。相关联。 在在Unix&Linux环境中,标准环境中,标准I/O库是建立在基本库是建立在基本I/O基础之上的。基础之上的。5流流 使用标准使用标准I/O库访问文件时,需要
3、首先打开文件。库访问文件时,需要首先打开文件。 打开文件成功后,系统内核将返回流(打开文件成功后,系统内核将返回流(stream)数据)数据结构。结构。所有对该文件的后续操作都将针对这个数据结构进行。所有对该文件的后续操作都将针对这个数据结构进行。实际上流结构是一个指向实际上流结构是一个指向FILE结构的指针。结构的指针。FILE结构流文件描述符缓存指针缓存区Inode结构6缓存缓存 标准输入输出方式(标准标准输入输出方式(标准I/O)与直接调用文件)与直接调用文件操作的系统调用(操作的系统调用(API方式)的区别:方式)的区别:标准标准I/O带缓存带缓存文件操作无缓存文件操作无缓存 缓存的含
4、义:在对文件进行缓存的含义:在对文件进行I/O操作时,对数据操作时,对数据的读写并不直接对文件系统,而是对缓存进行。的读写并不直接对文件系统,而是对缓存进行。当缓存空间满时,由系统根据缓存内容刷新到文当缓存空间满时,由系统根据缓存内容刷新到文件系统。件系统。优点:降低调用文件操作的频率。优点:降低调用文件操作的频率。7缓存缓存 标准标准I/O库提供的缓存方式有库提供的缓存方式有3种:种: 全缓存(缓存填满,则向文件系统刷新)全缓存(缓存填满,则向文件系统刷新) 行缓存(遇换行符,则向文件系统刷新)行缓存(遇换行符,则向文件系统刷新) 不缓存不缓存 缓存在第一次调用缓存在第一次调用I/O库时,由
5、系统自动调用库时,由系统自动调用malloc分分配。配。8缓存举例缓存举例 例:分别向标准输出(例:分别向标准输出(stdout)和标准错误)和标准错误(stderr)输输出信息,比较行缓存和不缓存的区别。出信息,比较行缓存和不缓存的区别。9缓存举例缓存举例 分析:标准输出采用行缓存,由于未输出换行符,所以分析:标准输出采用行缓存,由于未输出换行符,所以本条消息不会立即显示;标准错误输出是不缓存的,所本条消息不会立即显示;标准错误输出是不缓存的,所以立刻输出。以立刻输出。 标准标准I/O库提供改变缓存方式的函数:库提供改变缓存方式的函数: Setbuf() Setbuffer() Setlin
6、ebuf() 以上函数的声明位于头文件以上函数的声明位于头文件中中10改变流的缓存方式改变流的缓存方式 #include void setbuf(FILE *stream,char *buf) void setbuffer(FILE *stream,char *buf,size _t size) void setlinebuf(FILE *stream) setbuf函数:设置某个流对象的缓存区为函数:设置某个流对象的缓存区为BUFSIZ。buf若为若为NULL,则表示设置流为无缓冲模式。,则表示设置流为无缓冲模式。 setlinebuf函数:设置某函数:设置某个流对象为行缓存模式。个流对象为
7、行缓存模式。 setbuffer函数:设置某个流对象的缓存区为指定值。函数:设置某个流对象的缓存区为指定值。 参数说明:参数说明: stream:流对象:流对象 buf:自定义缓存区指针:自定义缓存区指针 size:缓存区:缓存区大小大小BUFSIZ是一个全局的常量 11缓存举例缓存举例 例:分别向标准输出(例:分别向标准输出(stdout)和标准错误)和标准错误(stderr)输输出信息,比较行缓存和不缓存的区别。出信息,比较行缓存和不缓存的区别。12缓存举例缓存举例 结果分析:调用结果分析:调用setbuf关闭缓存,使标准输出成为无缓关闭缓存,使标准输出成为无缓存模式。存模式。13标准输入
8、、标准输出和标准错误输出标准输入、标准输出和标准错误输出 对每一个进程来说,系统默认为其打开对每一个进程来说,系统默认为其打开3个流:个流: 标准输入标准输入 标准输出标准输出 标准错误输出标准错误输出 分别用宏定义表示(分别用宏定义表示(stdin,stdout,stderr)stdin stdout stderr 0 1 2 UNIX/Linux下的文件描述符 14输入输出重定向举例输入输出重定向举例 例:编程实现标准输出的重定向。例:编程实现标准输出的重定向。文件描述符1代表标准输出/*流文件描述符*/15上例说明:上例说明: void perror(const char *s); 函数
9、说明:函数说明:perror( ) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。 函数名: dup2 功能: 复制文件句柄 用法: int dup2(int oldhandle,int newhandle); 16主要内容主要内容 标准标准I/O的基本概念的基本概念 流流 缓存缓存 标准输入、标准输出及标准错误输出标准输入、标准输出及标准错误输出使用标准使用标准I/O进行文件操作进行文件操作流文件的开关方式流文件的开关方式单字符方式读写单字符方式读写行方式读
10、写行方式读写二进制方式读写二进制方式读写格式化输入格式化输入/输出输出17使用标准使用标准I/O进行文件操作进行文件操作 要对一个流进行操作,必先打开该流,然后调用标准要对一个流进行操作,必先打开该流,然后调用标准I/O函数进行读写。函数进行读写。18打开关闭流文件打开关闭流文件 fopen函数(用前需打开) 类似与底层的open系统调用。主要用于文件的输入输出参数说明: filename 指定打开的文件 mode 打开文件的方式19打开关闭流文件打开关闭流文件 mode参数: “r” : 以只读方式打开,该文件必须存在。 “r+”:以可读写方式打开,该文件必须存在。 “rb+”:读写打开一个
11、二进制文件。 “w” :以只写方式打开,文件长度截短为零,不存在可建立。 “w+”:以读写方式打开,文件清零,不存在可建立。 “wb”:只写打开或建立一个二进制文件。 “wb+”:读写打开或建立一个二进制文件。 “a”:以追加只写方式打开文件,不存在可建立。 “a+”:以追加可读写方式打开文件,不存在可建立。20打开关闭流文件打开关闭流文件 fclose函数函数(用后需关闭)(用后需关闭) 关闭指定的文件流stream,使所有尚未写出的数据都写出。21打开关闭流文件打开关闭流文件 fopen与fclose例程#include int main()FILE *fp;fp = fopen(file
12、,w);fclose(fp);return 0;22单字符方式读写单字符方式读写 标准标准I/O库提供多种读写方式:库提供多种读写方式: 单字符方式读写单字符方式读写 行方式读写行方式读写 二进制方式读写二进制方式读写 单字符读写函数有以下单字符读写函数有以下6种:种: fgetc(getc),getchar从流中读取字符从流中读取字符 fputc(putc),putchar向流中写入字符向流中写入字符23单字符方式读写单字符方式读写 fgetc、getc和和getchar函数函数 从文件流里读取下一个字节并把它作为一个字符返回。从文件流里读取下一个字节并把它作为一个字符返回。当达到文件尾时,
13、返回当达到文件尾时,返回EOF。字符被强制转换为int型getchar()相当于getc(stdin)24单字符方式读写单字符方式读写 fputc、putc和和putchar函数函数 把一个字符写到一个输出文件流中。返回写入的值,如把一个字符写到一个输出文件流中。返回写入的值,如果失败,果失败, 返回返回EOF。25单字符方式读写举例单字符方式读写举例 例:编程实现十六进制格式显示文件内容。例:编程实现十六进制格式显示文件内容。(exam4.c)26单字符方式读写举例单字符方式读写举例/*对对C取取16进制值保存进制值保存到缓存区到缓存区*/27行方式读写行方式读写 对于大部分情况下,文本文件
14、与无格式文件进行的读写对于大部分情况下,文本文件与无格式文件进行的读写过程都是按行进行。过程都是按行进行。 标准标准I/O库提供的按行读写函数:库提供的按行读写函数: #include char *fgets(char *s,int n,FILE *stream) int fputs(char *s,FILE *stream) 参数说明:参数说明: s :读取或写入的缓存区:读取或写入的缓存区 n : 从流中读取的长度,单位字节从流中读取的长度,单位字节 stream: 流指针流指针28行方式读写举例行方式读写举例 例:编程实现按行读取文件的内容并输出至屏幕。例:编程实现按行读取文件的内容并输
15、出至屏幕。(exam5)优点:不必担心文件过长;不会占用过多缓存区29二进制方式读写二进制方式读写 按行方式适应大部分文本格式文件,但有按行方式适应大部分文本格式文件,但有些情况,文件的内容却需要按一定格式存些情况,文件的内容却需要按一定格式存放,比如存储了某个结构体。此时如果按放,比如存储了某个结构体。此时如果按行读写的话,读取到的数据将无法恢复到行读写的话,读取到的数据将无法恢复到原来的格式。在这种情况下,需使用标准原来的格式。在这种情况下,需使用标准I/O库提供的二进制方式读写功能。库提供的二进制方式读写功能。30二进制方式读写二进制方式读写 二进制方式最常用的场合即是结构体读写。二进制
16、方式最常用的场合即是结构体读写。#include size_t fread(void *buffer, size_t size, size_t count, FILE *stream )size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream ) 参数说明:参数说明: buffer读取或写入的内容读取或写入的内容 size每条记录长度每条记录长度 count记录个数记录个数 stream指向流的指针指向流的指针31二进制方式读写二进制方式读写 fread函数函数 从一个文件流里读取数据。数据从文件流从一个文件流里读
17、取数据。数据从文件流stream读读到到ptr指定的数据缓冲区里指定的数据缓冲区里,函数返回值是成功读到数函数返回值是成功读到数据缓冲区里的记录个数据缓冲区里的记录个数(不是字节数不是字节数)size参数指定每个数据记录的长度nitems给出要传输的记录个数32二进制方式读写二进制方式读写 fwrite函数函数 从指定的缓冲区里读取数据记录,并把他们写到输从指定的缓冲区里读取数据记录,并把他们写到输出流中,返回值为成功写入的记录个数。出流中,返回值为成功写入的记录个数。33二进制方式读写举例二进制方式读写举例 例:实现对结构体进行读写。例:实现对结构体进行读写。姓名年龄身高创建.bin二进制文
18、件34二进制方式读写举例二进制方式读写举例向流中写入打开.bin 文件读取一条记录输出数据35格式化输入输出格式化输入输出 格式化输入输出函数:格式化输入输出函数: printf();sprintf();fprintf() scanf(); sscanf(); fscanf();36格式化输入输出格式化输入输出 printf、fprintf和和sprintf函数函数 能够对各种不同类型的参数进行格式编排和输出。能够对各种不同类型的参数进行格式编排和输出。每个参数在输出流中的表示形式是由格式参数format控制的S 缓存区FILE 流37格式化输入输出格式化输入输出 scanf、fscanf和和ssc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑垃圾资源化的技术难题及其项目解决方案
- 固态电池产业化项目可行性研究报告(参考模板)
- 创意甜品外卖企业制定与实施新质生产力项目商业计划书
- 高精度电容电桥测试仪行业跨境出海项目商业计划书
- 高速互联接口(SerDes)芯片行业深度调研及发展项目商业计划书
- 科技型企业创新担保基金行业跨境出海项目商业计划书
- 佛教寺庙禅修体验营行业深度调研及发展项目商业计划书
- 高速碎浆机企业制定与实施新质生产力项目商业计划书
- 山东省潍坊市四县市2024-2025学年高一下学期期中考试数学试卷(解析版)
- 河南省南阳市第二中学校2023-2024学年高一下学期5月月考数学试题(原卷版)
- 西红门镇生活垃圾转运站及环卫停车场工程报告表
- 推进三变改革-发展集体经济课件
- 预防接种培训考核试题
- 封条模板A4直接打印版
- 《探访龙江剧》-完整版PPT
- GB∕T 31030-2014 机场旅客摆渡车
- 压缩空气系统验证方案
- 中暑预防与应急处理
- 病原学检测阴性肺结核诊断流程T∕CHATA 008-2020
- 尾矿库基础知识最全PPT资料课件
- dgt801系列数字式发电机变压器组保护装置调试大纲
评论
0/150
提交评论