2012-09-04 35 views
7

我想在Linux(2.6.31)中对sync(8)和fsync函数的功能有更多的说明。它确保文件被写入相应的存储?fsync,sync:它真的做它应该做的吗?

+0

为什么会这样怀疑? – Rohan

+0

因为我在写入SD卡后遇到问题。这里是链接http://stackoverflow.com/questions/12262044/sd-card-data-sometimes-not-seen-on-pc-when-connected-in-usb-mass-storage-mode-v – shinymetal

回答

8

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

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

+4

待更确切地说,它将数据刷新到设备,但设备通常具有自己的缓存层,所以在刷新后它可能仍然不在持久存储器中(即,它可能在磁盘的缓存中,但还没有在盘片/闪存)。这意味着如果您的电源关闭,您仍然可能会丢失数据。 –

+3

更确切地说,这取决于。如果你有一个支持障碍的fs,并且启用了这些障碍,那么sync()/ fsync()和其他一些操作将导致相应的CACHE FLUSH(ATA)或SYNCHRONIZE CACHE(SCSI)命令被发送到设备。当然,设备需要合理地执行这些命令。 – janneb

+0

如果有问题的设备(SD卡/ MMC驱动程序)维护它自己的缓存层,它会在哪里?我将能够调试此图层吗? – shinymetal

相关问题