我的情况如下:
我使用一个进程来编写新文件,并在完成后关闭它。另一个进程在第一个进程完成后立即打开此文件进行读取。不用说,两个进程都驻留在同一个客户端上。
我的工作平台是使用 HFS+ 文件系统的 OS X。
根据关闭手册页:
成功关闭并不能保证数据已成功保存到磁盘,因为内核延迟写入。文件系统在流关闭时刷新缓冲区并不常见。如果您需要确保数据是物理存储的,请使用 fsync(2)。(此时这将取决于磁盘硬件。)
这意味着文件不一定会保存到磁盘。但是,我只关心文件关闭后读取文件时的一致性,并且我会避免使用 fsync,因为它非常耗时。
是否保证第二个进程从缓存中读取更新的数据,即使它还没有刷新到磁盘?