read/write/fsync与fread/fwrite/fflush的关系和区别

read/write/fsync:

linux底层操作;

内核调用, 涉及到进程上下文的切换,即用户态到核心态的转换,这是个比较消耗性能的操作。

fread/fwrite/fflush:

c语言标准规定的io流操作,建立在read/write/fsync之上
在用户层, 又增加了一层缓冲机制,用于减少内核调用次数,但是增加了一次内存拷贝。

两者之间的关系,见下图:

补充:

对于输入设备,调用fsync/fflush将清空相应的缓冲区,其内数据将被丢弃;

对于输出设备或磁盘文件,fflush只能保证数据到达内核缓冲区,并不能保证数据到达物理设备, 因此应该在调用fflush后,调用fsync(fileno(stream)),确保数据存入磁盘。
————————————————————————————————

fflush函数和fsync函数对比如下:

1.fflush接受一个参数FILE *.

fflush(FILE *);

fflush是libc.a中提供的方法,是用来将流中未写的数据传送到内核。如果参数为null,将导致所有流冲洗。

fsync接受的时一个Int型的文件描述符。

fsync(int fd);

fsync是系统提供的系统调用。将数据写到磁盘上

2.fflush/fsync 功能区别

fflush:是把C库中的缓冲调用write函数写到磁盘[其实是写到内核的缓冲区]。

fsync:是把内核缓冲刷到磁盘上。

c库缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘

进一步引申到sync()、fflush()、fsync()这3个函数的别

a、三者的用途不一样:

sync,是同步整个系统的磁盘数据的.
fsync是同步打开的一个文件到缓冲区数据到磁盘上.
fflush是刷新打开的流的.

b、同样是同步,但三者的同步等级不一样:.

sync, 将缓冲区数据写回磁盘, 保持同步.(无参数)
fsync, 将缓冲区的数据写到文件中.(有一个参数 int fd)
fflush, 将文件流里未写出的数据立刻写出

fsync与fflush的关系和区别相关推荐

  1. IPython和Jupyter关系及区别

    IPython和Jupyter关系及区别 pycharm中 terminal和python console的区别? pycharm中 run file in console 什么是 IPython I ...

  2. 图解人工智能机器学习深度学习的关系和区别

    图解人工智能机器学习深度学习的关系和区别,先直观看下图的关系: AI(Artificial Intelligence.人工智能).机器学习(machine learning).深度学习(Deep le ...

  3. Linux 库函数与系统调用的关系与区别

    上周总结了<C 标准库的基础 IO>,其实这些功能函数通过「系统调用」也能实现相应功能.这次文章并不是要详细介绍各系统调用接口的使用方法,而是要深入理解「库函数」与「系统」调用之间的关系和 ...

  4. CPU的核心数、线程数的关系和区别

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面笔者就来解释一下CPU的核心数与 ...

  5. SpringBoot与SpringCloud的关系与区别

    一.SpringBoot和SpringCloud简介 1.SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动Sp ...

  6. Table中Family和Qualifier的关系与区别(转载)

    Table中Family和Qualifier的关系与区别 就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和 ...

  7. java map与set的区别_java 集合(list,set,map)三者之间的关系和区别

    原 java 集合(list,set,map)三者之间的关系和区别 一:先上一张关系图,让大家看的更明白. 备注:其中红色部分为实现,其他地方均为接口. 二:各自的特点. List 有序,可重复Arr ...

  8. 阿里P8架构师谈:高并发与多线程的关系、区别、高并发的技术方案

    什么是高并发? 高并发(High Concurrency)是一种系统运行过程中遇到的一种"短时间内遇到大量操作请求"的情况,主要发生在web系统集中大量访问收到大量请求(例如:12 ...

  9. Jdk 和 jre 的 关系和区别

    Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包.是程序员使用java语言编写java程序所需的开发工 ...

最新文章

  1. 第十四课.马尔科夫链
  2. Cloud Native未来值得关注的方向:Service Mesh简介
  3. why I cannot set SAP UI5 dropdown list as not selected
  4. 双重差分模型能做固定效应吗_数据分析之道 | 双重差分法(DID)
  5. (二分+区间搜索 )Mountain Walking(poj2110/poj2922)
  6. Python+tkinter动态创建与销毁组件小案例
  7. 使用7zip把jre集成到绿色运行程序内
  8. linux 跑java程序_Linux下独立执行Java程序
  9. MySQL 基础--时间戳类型
  10. Kubernetes1.4即将发布
  11. JS不能向WASM传递数组?
  12. python回文字符串编程_P086 回文字符串
  13. Blender烘焙光照贴图
  14. 作为程序员,我将如何教育自己的孩子
  15. Java8新特性之Lambda,呦呦呦
  16. win32 api简易实现ftp文件上传
  17. Springboot+Thymeleaf实现投票功能
  18. kali入门笔记(残缺版)
  19. JVM -XX:CMSInitiatingOccupancyFraction=90 这个参数是有取值范围的
  20. u盘锁定计算机,如何让你的电脑“锁U盘”

热门文章

  1. Tomcat配置自签名https
  2. 微信群运营之设计运营思路
  3. 不同设备屏幕尺寸和DPR适配
  4. 2.12 Hivet中order by,sort by、distribute by和cluster by
  5. 08 Spring框架 AOP (一)
  6. Android天气预报设计
  7. 【BZOJ】3575: [Hnoi2014]道路堵塞
  8. MST:Bad Cowtractors(POJ 2377)
  9. (接口)银联证书上传被修改的问题和读取证书的绝对路径问题
  10. android junit 测试程序