在使用write函数向文件中写入数据的时候,并不是在调用了函数以后就直接把数据写入磁盘;操作系统在内核中设置了一块专门的缓冲区,数据会先被写入到内核的缓冲区中,等到缓冲区满了或者系统需要重新利用缓冲区的时候才会将缓冲区的数据排入到写队列中去,待到达对首的时候,就将数据写入到磁盘中。这就是延迟写,因为不是马上将更改后的数据刷入到磁盘中,所以就会导致缓冲区中的数据和磁盘中的数据不一致。

======================

sync函数:

void sync(void);

fsync 和 fdatasync:

int fsync(int fd);

int fdatasync(int fd);

函数参数:

fd:要操作的文件描述符

返回值:

调用成功返回0

失败返回-1

=======================

  • sync函数会强制将内核中的所有修改过的缓冲区刷新,并立刻返回,不会等到实际的I/O操作完成后再返回。所以sync函数并不能保证数据一定写入到了磁盘中。在Linux中有一个名为update的守护进程会定期(几秒或几十秒)调用sync函数,来刷新内核缓冲区。
  • fsync函数会强制将内核中与fd文件相关的缓冲区刷新,并等待到实际I/O操作结束后再返回,如果实际I/O操作未结束,那么函数将一直处于阻塞状态。所以fsync函数可以保证数据一定被写入到磁盘中。
  • fdatasync函数和fsync函数类似,唯一的区别就是fdatasync函数只会将文件的数据部分更新到磁盘中,而fsync函数不仅会将文件的数据部分还会将文件的属性更新到磁盘中。

转载于:https://www.cnblogs.com/haohaozhang/p/10093377.html

【Linux】文件IO --- sync、fsync、fdatesync相关推荐

  1. linux的每次IO大小控制,linux文件io缓冲

    linux文件io缓冲 出于速度和效率考虑,系统io调用(即内核)和标准 C语言库的io函数(即 stdin 函数)在操作磁盘文件时会对数据进行缓冲. read(),write()系统调用在操作磁盘文 ...

  2. Linux文件IO深入剖析

    文章目录 1 linux文件系统基本概念 1.1 文件系统基本概念 1.2 文件系统缓存 2 文件IO访问方式概述 2.1 标准文件IO 2.2 直接IO 2.3 缓存同步 1 linux文件系统基本 ...

  3. Linux 文件 IO

    参考:http://blog.csdn.net/wanxiao009/article/details/5648583 C 和 C++ 文件操作详解:http://blog.csdn.net/freek ...

  4. 漫谈linux文件io,Linux文件IO与通用块层的请求合并

    本文参考https://mp.weixin.qq.com/s/Imt4BW-zoHPpcOpcKZs_AQ, 公众号"Linux阅码场" 请求合并就是将进程内或者进程间产生的在物理 ...

  5. 浅析 Linux 文件 IO 读写

    浅析 Linux 文件 IO 读写 Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一).读者可以参考以下这个图: https://www.thomas-krenn.com/de/w ...

  6. linux同步IO: sync、fsync与fdatasync

    转载地址:https://blog.csdn.net/cywosp/article/details/8767327 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓 ...

  7. linux 同步IO: sync msync、fsync、fdatasync与 fflush

    最近阅读leveldb源码,作为一个保证可靠性的kv数据库其数据与磁盘的交互可谓是极其关键,其中涉及到了不少内存和磁盘同步的操作和策略.为了加深理解,从网上整理了linux池畔同步IO相关的函数,这里 ...

  8. linux 同步IO: sync、fsync与fdatasync、sys_sync【转】

    本文转自:http://blog.csdn.net/cywosp/article/details/8767327 和 http://www.2cto.com/os/201204/126687.html ...

  9. 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  10. 嵌入式 Linux 文件IO操作

    目录 Linux 文件操作 1 Linux 系统环境文件操作概念 2 缓冲 IO 文件操作 1 文件的创建,打开与关闭 fopen 函数函数 2 freopen 函数 3.fdopen函数 4.fcl ...

最新文章

  1. 计算机虚拟内存的设置
  2. NFS网络文件共享存储服务器
  3. 汇编实验2.2 查找匹配字符串(附有详细注释和源代码和相关知识)
  4. C语言 下标运算符和指针运算符
  5. C/Cpp / const 用法
  6. Tomcat之Windows下安装
  7. JAVA接口里面的变量
  8. 方法:如何解决NetShareEnum返回ERROR_NO_UNICODE_TRANSLATION(1113)的问题
  9. access denied (java.io.FilePermission IKAnalyzer.cfg.xml read
  10. PyCharm汉化包安装下载及PyCharm无法进行设置问题
  11. element-ui的pagination分页 增加首页和末页
  12. 数据可视化技术:python数据可视化工具库汇总(共21个)
  13. 使用APICloud AVM多端框架开发app通讯录功能
  14. Swift中MVP、Moya、模型设计
  15. C# Chart之双Y轴图表实现
  16. 让技术Leader疯狂点赞的Linux速成手册,到底有多强悍?
  17. 如何应对CPU帧率瓶颈和卡顿?腾讯游戏学院专家带你剖析
  18. int(4)、int(8)、int(11) 分别占用几个字节 ?
  19. C语言之不等式的写法,大于小于等于
  20. 系统(层次)聚类法及Spss实现

热门文章

  1. Python中import导入模块
  2. c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
  3. linux spidev 应用_嵌入式Linux设备树语法总结
  4. java文件名命名的规则,Java文件名及其他命名规则
  5. java write to files_Java 8 write to file example
  6. 怎么查看python文件的代码_python实现代码查看列举目录下的文件
  7. thinkphp5 mysql助手_ThinkPHP5-数据库基本操作
  8. ubuntu java 1.8 1.7_java – 在Ubuntu上从JDK 1.7移动到JDK 1.8
  9. 什么是浏览器同源策略?
  10. 【BZOJ3289】Mato的文件管理,莫队+树状数组