我需要在现有文件的中间自动写入大约 64 kB 的数据。仅此而已,否则什么都不应该写。如何在 Linux/C 中实现?
最佳答案
我认为这是不可能的,或者至少没有任何接口(interface)可以保证作为其契约的一部分写入是原子的。换句话说,如果现在有一种方法是原子的,那就是一个实现细节,并且依赖它保持这种方式是不安全的。您可能需要找到其他解决方案来解决您的问题。
但是,如果您只有一个写入进程,并且您的目标是其他进程看到完整的写入或根本没有写入,您可以只在文件的临时副本中进行更改,然后使用 rename
以原子方式替换它。任何已经打开旧文件的文件描述符的读者都将看到旧内容;任何按名字新打开它的读者都会看到新内容。部分更新永远不会被任何读者看到。
关于c - 原子写入 64kB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811905/