c语言libc库自带的fflush和linux的sync、fsync、fdatasync,字面上都是刷新缓冲区数据到磁盘(当然,fflush还可以刷新缓冲区数据到标准输入、输出以及错误输出)。下面就分析一下上面提到的四个函数的区别。
FILE缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘
传统的UNIX系统在内核中设有页高速缓存,磁盘I/O的数据一般都通过这个缓存区。(所有增加缓存的目的显然都是协调两个速度不匹配的操作或者设备,这样就会很大程度缓解慢设备对快设备的拖累。)当我们向文件写入数据时,内核通常会先将数据复制到页告诉缓存中,然后将这些缓存页的地址排入队列,晚些时候再写入磁盘。这种方式被称为延迟写。