sync和fsync函数

sync和fsync函数sync和fsync函数传统的UNIX实现在内核中设有缓冲存储器,大多数磁盘I/O都通过缓存进行。当将数据写到文件上时,通常该数据先由内核复制到缓存中,如果该缓存尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓存以便存放其他磁盘块数据时,再将该缓存排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称之为延迟写(delayedwrite)(Bach〔…

大家好,欢迎来到IT知识分享网。sync和fsync函数

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

 

摘自 UNIX 环境高级编程一书

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21564.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信