




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章标准输入输出库1关于标准I/O库2主要内容标准I/O的基本概念流缓存标准输入、标准输出及标准错误输出使用标准I/O进行文件操作流文件的开关方式单字符方式读写行方式读写二进制方式读写格式化输入/输出3引入Linux系统下的文件操作有两种方式:直接调用文件操作的系统调用(API方式)标准输入输出方式(标准I/O)标准I/O库是于1975年左右编写完成的,是用于处理流和文件的一个库.
标准I/O库可以在很多操作系统下移植。基本I/O是针对文件描述符的,而标准I/O是基于流的。当通过标准I/O打开或者创建文件的时候,系统使用一个流和文件相关联。在Unix&Linux环境中,标准I/O库是建立在基本I/O基础之上的。4流使用标准I/O库访问文件时,需要首先打开文件。打开文件成功后,系统内核将返回流(stream)数据结构。所有对该文件的后续操作都将针对这个数据结构进行。实际上流结构是一个指向FILE结构的指针。FILE结构流文件描述符缓存指针缓存区Inode结构…………5缓存标准输入输出方式(标准I/O)与直接调用文件操作的系统调用(API方式)的区别:标准I/O带缓存文件操作无缓存缓存的含义:在对文件进行I/O操作时,对数据的读写并不直接对文件系统,而是对缓存进行。当缓存空间满时,由系统根据缓存内容刷新到文件系统。优点:降低调用文件操作的频率。6缓存标准I/O库提供的缓存方式有3种:全缓存(缓存填满,则向文件系统刷新)行缓存(遇换行符,则向文件系统刷新)不缓存缓存在第一次调用I/O库时,由系统自动调用malloc分配。7缓存举例例:分别向标准输出(stdout)和标准错误(stderr)输出信息,比较行缓存和不缓存的区别。8缓存举例分析:标准输出采用行缓存,由于未输出换行符,所以本条消息不会立即显示;标准错误输出是不缓存的,所以立刻输出。标准I/O库提供改变缓存方式的函数:Setbuf()Setbuffer()Setlinebuf()以上函数的声明位于头文件<stdio.h>中9改变流的缓存方式#include<stdio.h>voidsetbuf(FILE*stream,char*buf)voidsetbuffer(FILE*stream,char*buf,size_tsize)voidsetlinebuf(FILE*stream)setbuf函数:设置某个流对象的缓存区为BUFSIZ。buf若为NULL,则表示设置流为无缓冲模式。setlinebuf函数:设置某个流对象为行缓存模式。setbuffer函数:设置某个流对象的缓存区为指定值。参数说明:stream:流对象buf:自定义缓存区指针size:缓存区大小BUFSIZ是一个全局的常量10缓存举例例:分别向标准输出(stdout)和标准错误(stderr)输出信息,比较行缓存和不缓存的区别。11缓存举例结果分析:调用setbuf关闭缓存,使标准输出成为无缓存模式。12标准输入、标准输出和标准错误输出对每一个进程来说,系统默认为其打开3个流:标准输入标准输出标准错误输出分别用宏定义表示(stdin,stdout,stderr)stdinstdoutstderr012UNIX/Linux下的文件描述符
13输入输出重定向举例例:编程实现标准输出的重定向。文件描述符1代表标准输出/*流文件描述符*/14上例说明:voidperror(constchar*s);
函数说明:perror()用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数s所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno的值来决定要输出的字符串。函数名:dup2功能:复制文件句柄用法:intdup2(intoldhandle,intnewhandle);15主要内容标准I/O的基本概念流缓存标准输入、标准输出及标准错误输出使用标准I/O进行文件操作流文件的开关方式单字符方式读写行方式读写二进制方式读写格式化输入/输出16使用标准I/O进行文件操作要对一个流进行操作,必先打开该流,然后调用标准I/O函数进行读写。17打开关闭流文件fopen函数(用前需打开)类似与底层的open系统调用。主要用于文件的输入输出参数说明:filename指定打开的文件mode打开文件的方式18打开关闭流文件mode参数:“r”:以只读方式打开,该文件必须存在。“r+”:以可读写方式打开,该文件必须存在。“rb+”:读写打开一个二进制文件。“w”:以只写方式打开,文件长度截短为零,不存在可建立。“w+”:以读写方式打开,文件清零,不存在可建立。“wb”:只写打开或建立一个二进制文件。“wb+”:读写打开或建立一个二进制文件。“a”:以追加只写方式打开文件,不存在可建立。“a+”:以追加可读写方式打开文件,不存在可建立。19打开关闭流文件fclose函数(用后需关闭)关闭指定的文件流stream,使所有尚未写出的数据都写出。20打开关闭流文件fopen与fclose例程#include<stdio.h>intmain(){ FILE*fp; fp=fopen("file","w"); fclose(fp); return0;}21单字符方式读写标准I/O库提供多种读写方式:单字符方式读写行方式读写二进制方式读写单字符读写函数有以下6种:fgetc(getc),getchar从流中读取字符fputc(putc),putchar向流中写入字符22单字符方式读写fgetc、getc和getchar函数从文件流里读取下一个字节并把它作为一个字符返回。当达到文件尾时,返回EOF。字符被强制转换为int型getchar()相当于getc(stdin)23单字符方式读写fputc、putc和putchar函数把一个字符写到一个输出文件流中。返回写入的值,如果失败,返回EOF。24单字符方式读写举例例:编程实现十六进制格式显示文件内容。(exam4.c)25单字符方式读写举例/*对C取16进制值保存到缓存区*/26行方式读写对于大部分情况下,文本文件与无格式文件进行的读写过程都是按行进行。标准I/O库提供的按行读写函数:#include<stdio.h>char*fgets(char*s,intn,FILE*stream)intfputs(char*s,FILE*stream)参数说明:s:读取或写入的缓存区n:从流中读取的长度,单位字节stream:流指针27行方式读写举例例:编程实现按行读取文件的内容并输出至屏幕。(exam5)优点:不必担心文件过长;不会占用过多缓存区28二进制方式读写按行方式适应大部分文本格式文件,但有些情况,文件的内容却需要按一定格式存放,比如存储了某个结构体。此时如果按行读写的话,读取到的数据将无法恢复到原来的格式。在这种情况下,需使用标准I/O库提供的二进制方式读写功能。29二进制方式读写二进制方式最常用的场合即是结构体读写。#include<stdio.h>size_tfread(void
*buffer,
size_t
size,
size_t
count,
FILE
*stream)size_tfwrite(constvoid*buffer,size_tsize,size_tcount,FILE*stream)参数说明:buffer读取或写入的内容size每条记录长度count记录个数stream指向流的指针30二进制方式读写fread函数从一个文件流里读取数据。数据从文件流stream读到ptr指定的数据缓冲区里,函数返回值是成功读到数据缓冲区里的记录个数(不是字节数)size参数指定每个数据记录的长度nitems给出要传输的记录个数31二进制方式读写fwrite函数从指定的缓冲区里读取数据记录,并把他们写到输出流中,返回值为成功写入的记录个数。32二进制方式读写举例例:实现对结构体进行读写。姓名年龄身高创建.bin二进制文件33二进制方式读写举例向流中写入打开.bin文件读取一条记录输出数据34格式化输入输出格式化输入输出函数:printf();sprintf();fprintf()scanf();sscanf();fscanf();35格式化输入输出printf、fprintf和sprintf函数能够对各种不同类型的参数进行格式编排和输出。每个参数在输出流中的表示形式是由格式参数format控制的S缓存区FILE流3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 资产处置管理合同(2篇)
- 养老服务合同
- 热泵空调安装合同
- 烧烤服务合同
- 天津市著名房地产开发商建筑工程合同范本2025年
- 2025年冲突解决赔偿策划合同样本
- 竞业限制不得自营合同8篇
- 2025年个人养老金积累协议
- 2025年华宇快递服务合同模板
- 2025年购房首付款策划实施协议书
- 2024年苏州市职业大学单招职业适应性测试题库完整版
- 2024年广州港集团有限公司招聘笔试冲刺题(带答案解析)
- 【特级教师上优课】《黄河颂》名师课件
- 铝合金门窗安装施工工艺详解
- 《包装设计》课件-包装设计发展的历史
- 全国保密宣传教育月课件
- 医疗器械经营企业GSP培训
- 语言艺术训练智慧树知到期末考试答案2024年
- 报价单(产品报价单)
- 内镜逆行阑尾炎治疗术
- JJG 633-2024 气体容积式流量计
评论
0/150
提交评论