zoukankan      html  css  js  c++  java
  • 缓冲区整理

    Linux,unix在内核中设有 缓冲区高速缓冲或页面高速缓冲,大多数磁盘I/O都通过缓冲进行,采用延迟写技术。

    sync:将所有修改过的快缓存区排入写队列,然后返回,并不等待实际写磁盘操作结束

    fsync:只对有文件描述符制定的单一文件起作用,并且等待些磁盘操作结束,然后返回。

    fdatasync:类似fsync,但它只影响文件的数据部分。fsync还会同步更新文件的属性。

    fflush:标准I/O函数(如:fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync。(先调用fflush后调用fsync,否则不起作用

    传统的U N I X实现在内核中设有缓冲存储器,大多数磁盘I / O都通过缓存进行。当将数据写
    到文件上时,通常该数据先由内核复制到缓存中,如果该缓存尚未写满,则并不将其排入输出
    队列,而是等待其写满或者当内核需要重用该缓存以便存放其他磁盘块数据时,再将该缓存排
    入输出队列,然后待其到达队首时,才进行实际的I / O操作。这种输出方式被称之为延迟写
    (delayed write)(Bach 〔1 9 8 6〕第3章详细讨论了延迟写)。延迟写减少了磁盘读写次数,但是
    却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当
    系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓
    存中内容的一致性,U N I X系统提供了s y n c和f s y n c两个系统调用函数。
    #include <unistd.h>
    void sync(void);
    int fsync(intf i l e d e s) ;
    返回:若成功则为0,若出错则为-1
    s y n c只是将所有修改过的块的缓存排入写队列,然后就返回,它并不等待实际I / O操作结束。
    系统精灵进程(通常称为u p d a t e )一般每隔3 0秒调用一次s y n c函数。这就保证了定期刷新内
    核的块缓存。命令s y n c ( 1 )也调用s y n c函数。
    函数f s y n c只引用单个文件(由文件描述符f i l e d e s指定),它等待I / O结束,然后返回。f s y n c可
    用于数据库这样的应用程序,它确保修改过的块立即写到磁盘上。比较一下f s y n c和O _ S Y N C标
    志(见3 . 1 3节)。当调用f s y n c时,它更新文件的内容,而对于O _ S Y N C,则每次对文件调用w r i t e
    函数时就更新文件的内容。

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

  • 相关阅读:
    初心不负 笔记-JS高级程序设计-引用类型篇-Array
    CSS-样式篇
    笔记-JS高级程序设计-变量,作用域和内存问题
    笔记-JS高级程序设计-基本概念篇
    WPF 10天修炼 第四天- WPF布局容器
    WPF 10天修炼 第三天- Application全局应用程序类
    WPF 10天修炼 第二天- XAML语言
    WPF 10天修炼 第一天- 入门
    C# 关于e.Handled 的说明
    C# Replace方法
  • 原文地址:https://www.cnblogs.com/johnnyflute/p/3511892.html
Copyright © 2011-2022 走看看