标准IO和文件IO解析

本文介绍了C语言中的标准IO和文件IO。标准IO由stdio.h提供,包括带缓冲的IO,分为全缓存、行缓存和不带缓存三种,可通过setvbuf函数设置。文件IO是低级I/O,不带缓冲,使用文件描述符进行访问。数据传输过程中,系统掉电可能导致内核缓冲区数据未写入磁盘,需要通过fsync或sync确保数据持久化。
摘要由CSDN通过智能技术生成

一. 架构图
二. 标准IO
1. 标准IO简介

  • ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义
  • 带缓冲IO
  • 可移植性
  • 通过FILE 文件指针访问
2. 标准IO缓冲

  • 全缓存:当填满I/O才进行实际的I/O操作
  • 行缓存:当在输入和输出中遇到新行符号('\n'),进行I/O操作,例如:stdout
  • 不带缓存:标准I/O不对字符进行缓冲,例如stderr
3. 如何理解缓存类型

    要理解标准IO缓存,得理解FILE文件指针(struct _IO_FILE结构体),标准IO接口操作的是FILE文件指针,FILE文件指针定义了很多变量,包括读写缓冲区指针以及缓冲区类型标志。

    我们可以通过setvbuf函数设置缓存类型:

    int setvbuf(FILE *fp, char *buf, int mode, size_t size) 

    mode :_IOFBF 全缓存 _IOLBF 行缓存 _IONBF不带缓存

    实际上:stdout和stderr也是通过该接口进行设置,形成了不同的缓存类型。

三. 文件IO
1.文件IO简介

  • 低级磁盘I/O,遵循POSIX相关标准,任何兼容POSIX标准的操作系统上都支持文件I/O
  • 不带缓冲IO
  • 通过文件描述符访问
2.文件IO工作原理

    文件IO实现用户空间数据和内核缓冲区数据的交互,标准IO和内核的交互也是通过文件IO进行,标准IO只有满足一定的条件才进行文件IO操作。

四. 数据传输流程
1.系统掉电后,文件数据丢失?

    实际工作中,我们会遇到这样的情况,我们按照标准的方式去操作IO,结果数据丢失了,比如我们调用fflush函数。

    我们先理解一下数据传输流程,用户数据调用标准I/O(fflush,或者缓冲区自动刷新)仅仅只是进行了一次实际I/O操作(文件IO:write),只是把数据写入内核缓冲区,掉电后,内核缓冲区数据并没有写入磁盘,内核缓冲区会执行fsync操作(我们可以手动执行sync),这样才能真正的把数据写入磁盘,掉电后才不会丢失。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值