c - 原子写入 64kB

标签 c linux gcc

我需要在现有文件的中间自动写入大约 64 kB 的数据。仅此而已,否则什么都不应该写。如何在 Linux/C 中实现?

最佳答案

我认为这是不可能的,或者至少没有任何接口(interface)可以保证作为其契约的一部分写入是原子的。换句话说,如果现在有一种方法是原子的,那就是一个实现细节,并且依赖它保持这种方式是不安全的。您可能需要找到其他解决方案来解决您的问题。

但是,如果您只有一个写入进程,并且您的目标是其他进程看到完整的写入或根本没有写入,您可以只在文件的临时副本中进行更改,然后使用 rename 以原子方式替换它。任何已经打开旧文件的文件描述符的读者都将看到旧内容;任何按名字新打开它的读者都会看到新内容。部分更新永远不会被任何读者看到。

关于c - 原子写入 64kB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811905/

相关文章:

c++ - 有没有办法使用 clang-format 来做 "indentation only"?

regex - 使用正则表达式在 linux 中重命名文件

node.js - BASH - 为什么我的 NodeJS 服务器脚本崩溃了?

linux - 变量在 vim 中打印正常,但在 bash shell 中却不行,这是怎么发生的?

c++ - 类违反三(五)规则时的编译器警告

不同平台上比较方法中的 C++ 常量引用

calloc() 指向结构中的指针在 clang 上不起作用

c - 使用 scanf() 输入时出现问题

c - 未获得预期输出 - 查找单词的所有子词

c++ - Clang 行指令