我有10字节的数据要写入一个文件,在我的程序将9字节和7位写入硬盘之后,如果断电,在电到达后我能从这个文件读取多少字节?9字节还是10字节?
发布于 2017-01-03 13:19:52
你什么都不能说。这里有太多的抽象层。您的程序通常是缓冲区、OS缓冲区、芯片组缓冲区、驱动器本身的缓冲区,并且在某个时候数据将被写入。
当您要求通过类似于fsync
的东西对数据进行硬同步时,您所得到的只是确认至少您的数据已经写入,这并不能保证没有其他任何东西。
这需要非零的时间,该数据流通过所有这些层,并在物理上结束在您的磁盘,SSD或其他。如果在这个过程中的某个时候断电了,而且你还没有收到书面确认,那么安全的假设是你不知道写了多少。您必须检查之前写入的任何文件,并查看存在哪些数据。
当您的系统重新启动时,它可能必须从日志中恢复,并且任何未提交的更改都将被回滚。在您的示例中,实际写入的字节数是零。
https://stackoverflow.com/questions/36416829
复制相似问题