Linux文件写入同步

本文介绍了Linux系统中文件写入的同步过程,包括USER CACHE到SYS CACHE,再到DISK的步骤,以及FSYNC和FSYNC配合WRITE BARRIER在确保数据持久化上的作用。讨论了Fopen的RB+和WB+模式可能导致的文件损坏情况,并提到了直接IO操作O_DIRECT的限制和同步命令sync、syncfs、fsync和fdatasync的功能区别。
摘要由CSDN通过智能技术生成

概述

        之前在一个项目中总是会出现设备突然断电后,某些文件成为0byte或者文件数据只写入一半的情况,
经过研究后发现该问题的复现操作为在写入文件时进行突然的断电或将程序kill,再追入其中发现这个问题      
实质上与linux的文件系统有关,linux为了提升系统的运行速率设计了虚拟文件系统,该系统实际上并不会 
立刻将你通过代码写入文件的数据写入磁盘,而是以一种缓冲区的方式先完成了写入数据的临时性存储, 
完成这一步,linux的虚拟文件系统就会返回写入完成,但此时数据并未写入到磁盘,如果此时发生断电等 
异常情况,就会出现开篇所述的问题,现将文件数据写入流程以及一些注意点记录如下:

文件数据的实际写入以及对应Func如下

fileWrite->usrCache: fwrite
usrCache->sysCache: fflush
sysCache->diskCache: fsync
diskCache->disk: barrier
  • usrCache --> sysCache
  • 应用程序write文件完成之后,
    文件数据是暂存于USER CACHE,
    利用FFLUSH,将USER CACHE
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值