用来同步设备的写入操作,考虑把一块设局写入到硬盘的操作,如果使用write函数,函数返回后只能保证数据被写入到驱动程序或者内核管理的数据缓存中,而无法保证数据被真正写入到硬盘的存储块里。但是fync可以做到这一点,函数在数据块没有真正写道硬盘的存储卡里时不会返回,若返回则意味着要么设备在写入过程发生错误,要么数据已经写入到了设备的存储块。
显然大量的工作都在驱动程序这边,驱动程序需要针对不同的设备实现wirte和fsync例程,以满足应用程序的需求。
对于字符设备而言,大部分驱动程序都没有实现这个例程,只是简单将它们的struct file_operations对象的fsync指针赋值为NULL;对于块设备而言,则需要实现fsync。
int (*fsync) (struct file *, loff_t, loff_t, int datasync);