gpt4 book ai didi

c - fsync() 跨数据 block 的原子性

转载 作者:太空狗 更新时间:2023-10-29 12:41:44 25 4
gpt4 key购买 nike

在文件上调用 fsync() 时,文件会损坏吗?

例如,假设我的文件分布在磁盘 block 上:

    A             B
|---------| |--------|
| Hello, | -> | World! |
|---------| |--------|
| 1234567 | | 89abcd |
|---------| |--------|

假设我想将整个文件内容更改为小写(以一种非常低效的方式)。因此,我试图将文件的第 1 个位置将“H”更改为“h”,然后将第 8 个位置的“W”更改为“w”。然后我对该文件调用 fsync()。该文件分布在两个磁盘 block 中。

  1. 写入的顺序是否保持不变?
  2. fsync() 操作是否是跨磁盘的原子操作

最佳答案

fsync 调用不会返回,直到两次写入以及任何关联的元数据都写入磁盘。如果您的计算机崩溃(通常是由于断电)并且您有损坏的文件,请向文件系统维护人员记录错误报告 - 这是不应该发生的。如果 fsync 返回,则数据已安全地存储在磁盘上。

虽然要回答你的问题,文件系统和磁盘驱动程序没有理由不能重新排序写入(他们认为它们是非重叠的,如果磁盘头所在的位置,那么先写入第二个可能有用在旋转介质上)。其次,fsync 不可能是原子的,因为它处理现实生活中的硬件。它应该对用户以原子方式行动(您将拥有文件的第一个副本或第二个副本,但不会损坏任何东西)。

关于c - fsync() 跨数据 block 的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com