linux平台下的写文件刷新
来源:互联网 发布:多传感器数据融合 编辑:程序博客网 时间:2024/05/17 19:18
c语言libc库自带的fflush和linux的sync、fsync、fdatasync,字面上都是刷新缓冲区数据到磁盘(当然,fflush还可以刷新缓冲区数据到标准输入、输出以及错误输出)。下面就分析一下上面提到的四个函数的区别。
一、c语言fflush和linux的sync、fsync、fdatasync的区别
1.接口基本不同
fflush是libc库中提供的函数,平台无关,只有在你使用到c语言的标准文件(FILE)操作时,才涉及fflush。
sync、fsync、fdatasync是系统提供的系统调,平台相关。
2.原形
fflush接受一个参数FILE *.
fflush(FILE *);sync、fsync、fdatasync的函数原型如下(fd表示文件描述符)。
sync();
fsync(int fd);
fdatasync(int fd);
3.功能
fflush:
是把C语言FILE的缓冲区中要写入文件的内容刷到操作系统的写入缓冲区中(其实是写到内核的缓冲区,即 页高速缓存)。注意:FILE的缓冲区实际就是libc库在用户空间的栈上申请的一块内存。sync、fsync、fdatasync:是把内核的缓冲区(即 页高速缓存)中要写到磁盘中的数据刷到磁盘上。
下面引用一个比较形象的流程示例:FILE缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘
二、sync、fsync、fdatasync之间的区别
传统的UNIX系统在内核中设有页高速缓存,磁盘I/O的数据一般都通过这个缓存区。(所有增加缓存的目的显然都是协调两个速度不匹配的操作或者设备,这样就会很大程度缓解慢设备对快设备的拖累。)当我们向文件写入数据时,内核通常会先将数据复制到页告诉缓存中,然后将这些缓存页的地址排入队列,晚些时候再写入磁盘。这种方式被称为延迟写。
1、sync和fsync、fdatasync的区别
sync只是将页高速缓存中所有修改过的块的地址排入写入队列,然后返回,他并不等待实际写磁盘操作结束。
fsync、fdatasync只对参数fd指定的一个文件起作用,并且等到写磁盘结束才返回。
这两个系统调用一般用于数据库这样的应用程序,这种应用需要确保修改过的块立即写到磁盘上。
2、fsync和fdatasync的区别
fsync不仅会讲数据写入磁盘上文件的数据(data)部分,还会将要更改的文件属性也刷到磁盘上的文件元数据(inode)部分。
fdatasync只影响文件的数据部分。
- linux平台下的写文件刷新
- linux平台下的写文件刷新
- Windows平台下写文件的回车换行问题
- Linux下写日志文件
- Linux平台下阅读CHM文件的简易方法
- 刚写的一个linux下查找文件的脚本
- linux下的内存映射文件无法写回
- 自己写的一个LINUX 下目录文件遍历程序
- linux下修改windows写文件的格式
- Linux下Java写文件ANSI_X3.4-1968的问题
- linux下追加所写的内容到文件内
- Linux平台下从零开始写一个C语言访问MySQL的测试程序
- 可跨平台的写BMP文件方法(linux 和windows)
- LINUX平台下ELF文件加载过程
- linux 平台下C语言创建文件
- 在linux平台下运行jar文件
- linux 平台下C语言创建文件
- linux下的源码平台
- 事件
- JavaScript语言基础
- deepin 编译提示g++: command not found的解决
- oracle数据库对象篇Database Object
- JS的进阶上山打怪咯之数据类型(一)
- linux平台下的写文件刷新
- Python高级数据处理与可视化(一)---- 聚类分析
- 欢迎使用CSDN-markdown编辑器
- Java反射机制-获取类信息
- CAS实现单点登录(sso)原理分析
- spring事务管理
- study-30:Zabbix监控
- 血泪史Docker
- electron-config导致webpack打包后运行程序报错的解决方案