手册页声明 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/