【问题标题】:Atomicity of file writes using O_APPEND in linux在 Linux 中使用 O_APPEND 进行文件写入的原子性
【发布时间】:2014-07-20 09:37:10
【问题描述】:

手册页声明 write() 系统调用是原子的。这是否意味着如果我有 2 个进程都将 4 GB 的文本写入同一个文件,我可以假设第一次写入将写入其 4 GB,然后第二次写入将其全部写入 4 GB(假设文件是用 O_APPEND 标志打开的)?

或者操作系统会缓冲两个写入,然后重复调用 write() 以便将完整的 8 GB 更改写入一系列小块?如果是这种情况,是否有任何关于这些块的顺序的保证,或者来自第一个进程的块是否可以与来自另一个进程的块交错?

【问题讨论】:

    标签: linux


    【解决方案1】:

    Are POSIX' read() and write() system calls atomic? 表示只有小于 PIPE_BUF 字节的写入才能保证写入是原子的,然后仅适用于管道操作。

    What happens if a write system call is called on same file by 2 different processes simultaneously 是关于此主题的另一个问题,答案相同。

    【讨论】:

    • 这不是只适用于写入管道吗?
    • 我相信你是对的 - 事实上,正如我链接到的问题的答案中所建议的那样,文件写入没有原子性保证 - 上面的编辑答案澄清了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2020-05-10
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多