fsync,sync:它真的做到了应有的意义吗?

spi*_*e88 9 linux filesystems linux-device-driver embedded-linux

我想更详细地说明Linux(2.6.31)中sync(8)和fsync函数的功能.它是否确保将文件写入相应的存储?

Oli*_*ver 8

http://linux.die.net/man/8/sync

它不确保将文件写入相应的存储.它只确保将缓存/缓冲的数据刷新到磁盘设备.这是SD卡还是其他什么都没关系.

  • 更准确地说,它将数据刷新到设备,但设备通常有自己的缓存层,因此在刷新后它可能仍然不在持久存储中(即它可能在磁盘的缓存中但尚未在盘片/闪存).这意味着如果您的电源关闭,您可能仍会丢失数据. (4认同)
  • 更确切地说,这取决于.如果你有支持障碍的fs,并且启用了这些障碍,则sync()/ fsync()和其他一些操作将导致相应的CACHE FLUSH(ATA)或SYNCHRONIZE CACHE(SCSI)命令被发送到设备; 当然,设备可以合理地实现这些命令. (3认同)
  • fsync告诉操作系统将其缓冲区/缓存刷新到物理介质.因此,从API的角度来看,它确保将文件写入相应的存储.但是,在存储介质控制器层,也可能存在链接. (3认同)