标准IO(2)

1.标准IO预定义3个流,可以自动为进程所使用
(1)标准输入 stdin:从键盘输入
eg:
在这里插入图片描述
(2)标准输出 stdout:从屏幕输出
eg:
在这里插入图片描述
(3)标准错误输出 stderr:主要用于出错处理信息的输出,不进缓存区
eg:有while(1) 也能输出
在这里插入图片描述
2.文件缓冲
定义 :内存中为每个正在使用的文件开辟一个缓冲区,向磁盘输出数据或从磁盘中读数据,都要先到内存缓存区,再从缓存区一批批地写入或读出

分类:全缓存,行缓存,无缓存
(1)全缓存:
大小为4k,主要用于文件的读写
对普通文件进行标准IO操作,建立的缓存一般为全缓存
刷新缓存区的条件:
*1.缓存区满4096字节刷新
*2.程序结束刷新
*3.fflush来刷新 fflush(fp) 可强制刷新一个流
eg:fflush强刷,使在死循环里也能输出
在这里插入图片描述
(2)行缓存:
大小为1k,主要用于人机交互stdout,行缓存多是关于终端的一些操作
刷新缓存区的条件:
*1.遇到\n刷新
*2.缓存区满1024字节刷新
*3.程序结束刷新
*4.fflush刷新 fflush(stdout);
eg:
在这里插入图片描述
(3)无缓存:
大小为0k 主要用于出错处理信息的输出 stderr ,不对数据缓存直接刷新
eg:不用刷新即可输出
在这里插入图片描述
3.读写操作
(1)读:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr 所在的本地内存中。
参数:
ptr 要存储数据的本地内存一般是数组或者结构体指针
size 单个数据块的元数据大小。最小单元的大小
nmemb 要获取的数据块的个数,拷贝的数据块个数。
stream 要获取数据的源文件流对象,如果是stdin表示从
键盘获取数据,如果是fp文件则表示从普通文件获取。
返回值:
成功 小于等于nemeb的整数,表示获取的数据长度
失败 小于0,结尾 0;
eg:
在这里插入图片描述

(2)写:
size_t fwrite(const void *ptr, size_t size,size_t nmemb,
FILE *stream);
功能:
从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应的文件流对象中。
参数:
ptr 要写的数据块地址,一般是数组或者结构体指针
size 要写的数据块元数据大小,单位是字节
nmemb 要写的数据块的个数
stream 要写的目标文件流对象。如果是stdout则表示数据会写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。

返回值:
成功 小于等于nmemb 的个数。
失败 <0
eg:
在这里插入图片描述
4.定位流
(1)
int fseek(FILE *stream, long offset, int whence);
功能:
将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。
参数:
stream 要移动文件指针的目标文件流对象。
注意:不支持设备文件,一般用于普通文件。
offset 要在文件内偏移的距离,单位字节。
如果值为整数,则向文件末尾偏移
如果值为负数,则向文件开头偏移
whence 偏移的起始位置,由系统定义的三个宏开始。
SEEK_SET 文件的开头位置
SEEK_CUR 文件的当前位置
SEEK_END 文件的末尾位置
返回值:
成功: 返回 0
失败: -1;

如果从文件的指定位置向后偏移过程中已经超过了文件
的当前末尾位置,则会自动以’\0’来填充文件内容,从
而形成一种被称为"空洞文件" 的特殊文件。
eg:
定位读取:
在这里插入图片描述

定位写入:
在这里插入图片描述
(2)
long ftell(FILE *stream)<==>rewind(fp);
功能:
获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。
参数:
stream 要返回指针距离的文件流对象
返回值:
成功 获取到的距离长度,单位是字节
失败 -1;
eg:

(3)
void rewind(FILE *stream) ;
等效于:fseek(stream,0L,SEEK_SET)
功能:
用于设定流的文件位置指示为文件开始
返回值:无

练习
1.fgets复制文本文件
在这里插入图片描述
2.文件的插入
思路:先定位到要插入的位置,把此位置后的内容fgets,恢复从头开始,再定位到刚才的位置插入要插入的内容,再fputs刚fgets的内容,即完成文件插入
解法一:
在这里插入图片描述
解法二:
在这里插入图片描述
3.开一个大小为1G的文件
在这里插入图片描述
4.复制图片
思路:先确定文件长度/大小;用fread、fwrite
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值