From Apue 3.13
sync、fsync和fdatasync函数
传统的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还会同步更新文件的属性。
本书说明的所有四种平台都支持sync和fsync函数。但是,FreeBSD 5.2.1和Mac OS X 10.3并不支持fdatasync。
<!-- page -->
分享到:
相关推荐
在IT领域,尤其是在操作系统和文件系统管理中,`sync`、`fsync`和`fdatasync`是三个至关重要的函数,它们用于确保数据的安全写入和系统一致性。以下是这三个函数的详细说明: 1. **sync函数**: `sync`函数的作用...
本文总结了C++面试题网络编程篇中的重要知识点,包括dup和dup2函数、lseek函数、sync、fsync和fdatasync函数、fcntl函数、exit和_exit函数、setjmp和longjmp函数、记录锁、守护进程编程规范等。 1. dup和dup2函数 ...
此外,还涉及了一些高级主题,比如同步文件I/O操作,包括sync、fsync和fdatasync函数,以及fcntl函数提供的文件控制操作。ioctl函数作为执行设备特定操作的通用接口,也在书中得到了相应的讨论。 整体而言,《UNIX...
#### 3.13 sync, fsync, and fdatasync Functions(sync、fsync和fdatasync函数) 这里介绍了如何使用这些函数同步文件缓冲区到磁盘。 #### 3.14 fcntl Function(fcntl函数) 本节详细解释了fcntl函数的功能及其...
`fsync()`和`fdatasync()`系统调用用于将缓冲区中的数据强制写入磁盘,前者同步文件元数据和数据,后者只同步数据。 ##### 2.4.2 麦 བལ-eff 与 麦 བལ-eff 在同步文件数据后,需要关闭文件以释放资源。 ##### ...
还涉及了文件同步函数sync、fsync和fdatasync,以及fcntl函数用于更改已打开文件的状态。 4. 文件和目录:介绍了如何使用stat、fstat和lstat函数来获取文件信息,文件访问权限的设置与检查,文件尺寸的获取,以及硬...
**3.13 sync、fsync和fdatasync函数** 本节分析了这组函数在文件缓存与磁盘同步方面的作用。 **3.14 fcntl函数** 本节探讨了fcntl函数的用途及其与文件控制相关的参数设置。 **3.15 ioctl函数** 本节介绍了ioctl...
##### 2.4.1 `fsync()`与`fdatasync()` `fsync()`函数将文件的所有更改写入磁盘,而`fdatasync()`只同步文件数据,不包括元数据。 ##### 2.4.2 文件缓冲与同步 在同步之前,通常需要先清空文件缓冲区。 ##### ...
sync()、fsync()和fdatasync()系统调用 第十六章访问文件 读写文件 内存映射 直接I/O传送 异步I/O 第十七章回收页框 页框回收算法 反向映射 PFRA实现 交换 第十八章Ext2和Ext3文件系统 ...
例如,如果只需要保证当前文件的数据一致性,`fsync()`或`fdatasync()`就足够了。而如果是系统级的全面刷盘,比如在系统关机前,`sync()`则是必要的。了解这些函数的用法和差异,对于提升程序的稳定性和可靠性至关...