fsync与fflush的关系和区别
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的关系和区别相关推荐
- IPython和Jupyter关系及区别
IPython和Jupyter关系及区别 pycharm中 terminal和python console的区别? pycharm中 run file in console 什么是 IPython I ...
- 图解人工智能机器学习深度学习的关系和区别
图解人工智能机器学习深度学习的关系和区别,先直观看下图的关系: AI(Artificial Intelligence.人工智能).机器学习(machine learning).深度学习(Deep le ...
- Linux 库函数与系统调用的关系与区别
上周总结了<C 标准库的基础 IO>,其实这些功能函数通过「系统调用」也能实现相应功能.这次文章并不是要详细介绍各系统调用接口的使用方法,而是要深入理解「库函数」与「系统」调用之间的关系和 ...
- CPU的核心数、线程数的关系和区别
我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面笔者就来解释一下CPU的核心数与 ...
- SpringBoot与SpringCloud的关系与区别
一.SpringBoot和SpringCloud简介 1.SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动Sp ...
- Table中Family和Qualifier的关系与区别(转载)
Table中Family和Qualifier的关系与区别 就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和 ...
- java map与set的区别_java 集合(list,set,map)三者之间的关系和区别
原 java 集合(list,set,map)三者之间的关系和区别 一:先上一张关系图,让大家看的更明白. 备注:其中红色部分为实现,其他地方均为接口. 二:各自的特点. List 有序,可重复Arr ...
- 阿里P8架构师谈:高并发与多线程的关系、区别、高并发的技术方案
什么是高并发? 高并发(High Concurrency)是一种系统运行过程中遇到的一种"短时间内遇到大量操作请求"的情况,主要发生在web系统集中大量访问收到大量请求(例如:12 ...
- Jdk 和 jre 的 关系和区别
Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包.是程序员使用java语言编写java程序所需的开发工 ...
最新文章
- 第十四课.马尔科夫链
- Cloud Native未来值得关注的方向:Service Mesh简介
- why I cannot set SAP UI5 dropdown list as not selected
- 双重差分模型能做固定效应吗_数据分析之道 | 双重差分法(DID)
- (二分+区间搜索 )Mountain Walking(poj2110/poj2922)
- Python+tkinter动态创建与销毁组件小案例
- 使用7zip把jre集成到绿色运行程序内
- linux 跑java程序_Linux下独立执行Java程序
- MySQL 基础--时间戳类型
- Kubernetes1.4即将发布
- JS不能向WASM传递数组?
- python回文字符串编程_P086 回文字符串
- Blender烘焙光照贴图
- 作为程序员,我将如何教育自己的孩子
- Java8新特性之Lambda,呦呦呦
- win32 api简易实现ftp文件上传
- Springboot+Thymeleaf实现投票功能
- kali入门笔记(残缺版)
- JVM -XX:CMSInitiatingOccupancyFraction=90 这个参数是有取值范围的
- u盘锁定计算机,如何让你的电脑“锁U盘”