`
cocos
  • 浏览: 404961 次
  • 性别: 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

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

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

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

    Linux系统编程哈工大中文版

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

    Linux常用C函数(中文版)

    - **sync**:同步所有文件系统缓冲区到磁盘。 - **write**:向文件描述符写入数据。 #### 文件内容操作篇 - **clearerr**:清除流的错误标志。 - **fclose**:关闭打开的文件流。 - **fdopen**:将文件描述符转换...

    linux-c-api-ref

    12. **`sync`**:同步所有文件的数据到磁盘。 13. **`write`**:向文件描述符写入数据。 #### 文件内容操作篇 1. **`clearerr`**:清除文件流的错误标志。 2. **`fclose`**:关闭文件流。 3. **`fdopen`**:将文件...

    linux_c API函数大全

    9. **文件操作篇**:文件操作函数包括`close()`关闭文件,`creat()`新建文件,`dup()`和`dup2()`复制文件描述符,`fcntl()`执行文件描述符操作,`flock()`锁定文件,`fsync()`同步数据到磁盘,`lseek()`移动文件指针...

Global site tag (gtag.js) - Google Analytics