`
cocos
  • 浏览: 401480 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

linux 磁盘 sync,fsync,fflush

阅读更多

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



fsync(将缓冲区数据写回磁盘)
相关函数 sync
表头文件 #include<unistd.h>
定义函数 int fsync(int fd);
函数说明 fsync()负责将参数fd所指的文件数据,由系统缓冲区写回磁盘,以
确保数据同步。
返回值 成功则返回0,失败返回-1,errno为错误代码。



传统的U N I X实现在内核中设有缓冲存储器,大多数磁盘I / O都通过缓存进行。当将数据写
到文件上时,通常该数据先由内核复制到缓存中,如果该缓存尚未写满,则并不将其排入输出
队列,而是等待其写满或者当内核需要重用该缓存以便存放其他磁盘块数据时,再将该缓存排
入输出队列,然后待其到达队首时,才进行实际的I / O操作。这种输出方式被称之为延迟写
(delayed write)(Bach 〔1 9 8 6〕第3章详细讨论了延迟写)。延迟写减少了磁盘读写次数,但是
第4章文件和目录8 7
下载
却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当
系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓
存中内容的一致性,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
函数时就更新文件的内容。


分享到:
评论

相关推荐

    Linux内核驱动fsync机制实现图解.docx

    Linux内核驱动fsync机制实现图解 Linux内核驱动fsync机制实现图解可以分为四个方面:同步阻塞I/O、同步非阻塞I/O、异步阻塞I/O和异步非阻塞I/O。 同步阻塞I/O:应用程序显式地通过函数访问数据,在此函数返回时就...

    Linux系统调用fsync函数详解.docx

    * fflush 函数的功能是把 C 库中的缓冲调用 write 函数写到磁盘上,而 fsync 函数的功能是把内核缓冲刷到磁盘上。 在实际应用中,fsync 函数可以用于确保文件系统的一致性,防止文件更新内容的丢失。在数据库应用...

    函数sync、fsync与fdatasync的总结整理(必看篇)

    为了确保数据的持久化,通常需要在调用`fflush`后使用`fsync`,将内核缓冲区的数据同步到磁盘。 在Linux系统中,保证数据正确写入外部存储设备的关键在于理解这些函数的异同,并根据需求选择合适的组合。例如,如果...

    Linux下的磁盘缓存.docx

    脏页的刷新可以通过`sync()`、`fsync()`或`fdatasync()`等系统调用来强制执行。内核还会利用pdflush内核线程来管理这一过程,早期版本的Linux有bdfllush和kupdate线程,但在Linux 2.6及以后版本,pdflush线程取代了...

    文件夹同步软件fsync中文注册版

    压缩包内的HB_filesync218_YY.exe文件很可能是FSync的安装程序,用户需运行此文件来安装软件。而"补丁说明.txt"文件则可能包含有关如何激活注册版或应用补丁的详细步骤,以解锁软件的全部功能。遵循这些说明,用户...

    linux-Linux性能优化实战案例

    `fsync`和`sync`在数据持久化中的作用也是优化的重点,尤其是对于大数据和数据库应用。 4. **内存管理**:`free`命令显示内存使用情况,而`smem`提供更详细的内存报告。理解交换分区(swap)的工作原理以及如何调整...

    漫谈linux文件IO

    在 Linux 开发领域,技术人员尤为关注几个关键性能指标:进程管理、CPU 使用率、内存占用、网络 I/O 和磁盘 I/O。其中,磁盘 I/O 性能尤其重要,因为它直接影响到系统的响应速度和整体性能。本文旨在全面、深入地...

    Understanding the Linux Kernel

     sync()、fsync()和fdatasync()系统调用  第十六章访问文件  读写文件  内存映射  直接I/O传送  异步I/O  第十七章回收页框  页框回收算法  反向映射  PFRA实现  交换  第十八章Ext2和Ext3文件系统  ...

    Linux系统编程哈工大中文版

    写入的数据通常会被暂时存储在缓冲区中,直到缓冲区满或调用`fflush()`等函数才会真正写入磁盘。 ##### 2.3.2 同步写入 可以通过`fsync()`函数确保所有数据都被立即写入磁盘。 ##### 2.3.3 非阻塞写入 设置文件...

    Linux系统编程.PDF

    - **fsync()**:强制将所有修改过的数据写入磁盘。 - **fdatasync()**:仅同步文件数据,不包括元数据。 - **2.4.2 文件锁定与缓存** - **定义**:确保文件数据的一致性。 - **作用**:防止数据丢失。 - **2.4.3...

    Linux 文件各种操作源码

    - `sync()`确保缓冲区中的数据被写入磁盘,`fsync()`和`fdatasync()`针对特定文件描述符执行同步操作。 - AIO(异步I/O)通过`aio_read()`和`aio_write()`实现非阻塞的文件操作。 以上只是Linux文件操作源码的一...

    Linux系统对文件进行加锁

    为了解决这个问题,可以结合使用Fsync函数在写操作后同步文件内容到磁盘,确保数据完整性。 总之,Linux中的Flock函数为多线程环境下的文件访问提供了安全的保护措施,通过设置锁来防止并发写入导致的问题。正确...

Global site tag (gtag.js) - Google Analytics