linux - 在 linux 中使用 O_APPEND 写入文件的原子性

标签 linux

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

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

最佳答案

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是关于这个主题的另一个问题,答案相同。

关于linux - 在 linux 中使用 O_APPEND 写入文件的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957769/

相关文章:

linux - 在 Linux 中的 Bash 脚本中检测 key 释放

linux - centos服务器检查可用内存的问题

linux - Ubuntu 16.04 如何删除多个大文件集

c - pthreads 编译的问题

linux - “make dep”因缺少分隔符而失败?

linux - 命令运行时执行循环

linux - 获取两个特殊字符之间的字符串

linux - sed 模式匹配直到第一次匹配

linux - 当同一驱动程序的多个实例同时运行时,内核如何处理对 proc 文件的读取操作

c - Linux 终端中忘记用户用 C 输入的代码