专栏首页转载gongluck的CSDN博客linux平台下的写文件刷新

linux平台下的写文件刷新

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只影响文件的数据部分。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python笔记:#012#函数

    函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,...

    _gongluck
  • MakeSureDirectoryPathExists与CreateDirectory的区别

    函数原型: MakeSureDirectoryPathExists(     _In_ PCSTR DirPath     ); CreateDirect...

    _gongluck
  • FFmpeg菜鸡互啄#第4篇#音频解码

    解码过程 音频解码跟上一篇的视频解码过程是一样的:打开输入文件,查找音频流,打开解码器,循环读帧解码帧,关闭解码器,关闭输入文件。 Code #define _...

    _gongluck
  • 少有人知的 Python "重试机制"

    为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题。

    Python编程与实战
  • 发行版制作及Anaconda基础

    Anaconda是用于Fedora, RHEL等Linux发行版的安装程序,可以实现通过LiveCD,PXE,NFS等方式安装Linux系统以及利用kickst...

    用户1214695
  • 【趋势红利】心得

    用户2025931
  • 付费系列 5 - Snowball Autocallable PDE 有限差分

    本篇以真实的交易证实 (term sheet) 为例,揉碎了讲解如何用 PDE FD 来定价雪球 Autocallable 产品。

    用户5753894
  • 【美限制中国AI投资】以安全名义封锁技术,BAT华为项目或受审

    【新智元导读】根据路透社和纽约时报报道,几名现任或前任美国政府官员称,美国正准备加强对中国在硅谷投资的审查,以更好地保护“对美国国家安全至关重要的敏感技术”,这...

    新智元
  • 敲黑板:大数据并非新的石油资源!

    译者:王恒 审校:朱玉雪 本文长度为2000字,预估阅读时间10分钟。 摘要:近些年常常耳闻,大数据就是未来石油资源!事实真的如此吗?今天让我们一起来听听BB...

    iCDO互联网数据官
  • 「PHP7数组详解」:第1章 环境搭建安装(一)

    PHP环境可以安装到几乎所有的主流操作系统。也就是说,开发者写一次,就可以在不同平台,无扰切换地使用了。

    程序员小助手

扫码关注云+社区

领取腾讯云代金券