3.缓存同步
缓存同步是是为了解决断电、计算机崩溃时数据丢失的问题。保证
缓存数据和写到磁盘上数据的一致性,该方法涉及3个函数:
sync、fsync、fdatasync。
(1)sync(void)·将所有修改过的块缓冲区排人写队列,然后立即返回,不等待实际写
磁盘操作结束。数据是否写人磁盘并没有保障。
(2)fsync(int fd)将fd对应文件的缓冲区立即写人磁盘,并等待实际写磁盘操作结
束后返回,可用于数据库这样的应用程序’因为这种应用程序需要确保修改过的数据立即
写到磁盘上。
(3)fdatasync(int fd)类似于fsync,但只影响文件的数据部分,除数据外,fsync还
会同步更新文件属性(如文件大小、文件访问时间等。文件属性和文件内容是分开存储的’
写磁盘会涉及2次寻道),所以fdatasync比fsync执行速度更快。
具体如何应用呢?最好是调用多次write函数’再调用1次fsync函数,否则频繁调用
fsync函数,效率也会很低下。如果文件很大,就都写完’然后调用1次fsync函数’这样才
比较有意义。如果整个文件需要调用write函数10次才能写完’那么每写1次’就调用fsync
函数1次意义就不大,写10次后,再调用fsync函数1次,就非常合适代码示意如下:
write(..)
write(..)
write(..)
fsync()