sync fsync fdatasync fflush区别
来源:互联网 发布:淘宝外卖不能分口袋 编辑:程序博客网 时间:2024/06/05 18:19
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)(Bach [1986]第3章详细讨论了缓冲区高速缓存)。
延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓冲区高速缓存中内容的一致性,UNIX系统提供了sync、fsync和fdatasync三个函数。
sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。
通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数。这就保证了定期冲洗内核的块缓冲区。命令sync(1)也调用sync函数。
fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。
fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。
fflush函数,标准I/O函数(如fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要将其写入磁盘,还需要调用fsync。
本书说明的所有四种平台都支持sync和fsync函数。但是,FreeBSD 5.2.1和Mac OS X 10.3并不支持fdatasync。
http://hi.baidu.com/beyond907/blog/item/651dd0fbe701ce8258ee9022.html
- sync fsync fdatasync fflush区别
- sync,fsync,fdatasync,fflush
- sync,fsync,fdatasync,fflush
- sync fsync fdatasync fflush函数区别
- sync、fsync、fdatasync、fflush函数
- sync、fsync、fdatasync、fflush函数
- sync、fsync、fdatasync、fflush函数
- sync、fsync、fdatasync、fflush函数
- sync、fsync、fdatasync、fflush函数
- sync,fsync,fdatasync的区别
- linux 同步IO: sync msync、fsync、fdatasync与 fflush
- linux 同步IO: sync msync、fsync、fdatasync与 fflush
- sync、fsync和fdatasync函数区别
- 一句话说明sync, fsync, fdatasync的区别
- fsync、sync、fdatasync函数
- sync、fsync与fdatasync
- sync,fsync,fdatasync函数
- sync、fsync、fdatasync知识点
- 8086汇编指令全称
- MySQL中show的用法
- @Column
- 图文验证遭遇主题相关内容干扰
- 保护你的隐私,五种控制Android应用的权限的方法
- sync fsync fdatasync fflush区别
- Android类似QQ同步助手的Tab界面的实现
- MySQL服务启动脚本完全解析
- Java接口和抽象类有什么区别,什么时候用接口好,什么时候用抽象类好?
- 我看资讯:苹果有望下月初发布iPad3
- Andriod学习笔记(一)
- Agile Software - PLM (产品生命周期管理)
- 苹果正秘密试验将Mac OS X导入ARM架构
- poj2503