主要问题是:在考虑硬盘扇区大小(例如512)的情况下,通过将新数据附加到文件末尾是否可能导致数据损坏?
例如,如果我有1023字节的文件,附加1个字节,然后出现故障(停电、磁盘缓冲区问题等等),会发生什么?
在这种情况下,第二个扇区将处于什么状态?
很难说。需要考虑多个抽象层,缓存和甚至简单的电传传播延迟。
你的代码可能已经写出一个字节。但操作系统不会立即写入该字节。这些天,击中驱动器是计算机可以执行的最慢的操作之一,因此它将缓冲该字节并查看是否有其他字节被阻塞输入缓冲区。
如果在缓存超时期内未发生任何事情,则将发送字节到驱动器以提交到介质。但驱动器本身也可能进行一些缓存等操作...需要考虑旋转延迟(实际扇区应该进入的位置必须实际位于写头下方才能被书写,这可能需要几毫秒)。
换句话说,将一个字节写入磁盘可能需要随机的时间才能真正写入磁盘介质。如果在此间隔期间发生停电,数据就丢失了。