在某些情况下,编码器不能依赖原子的系统调用,例如如果文件在NFS文件系统上。 (c.f。NFS Overview, FAQ and HOWTO Documents)。但是大多数数据库工作最终都需要原子系统调用。 (c.f。Atomicity of database systems)。
是否有标准(和OS独立)方式确认写入(和其他系统调用)在C(或python)中的特定FILE上是原子的。
有什么建议吗?
后续说明:管道的原子性将在下面讨论:
特别注意“man”页面提取专门处理O_APPEND:
如果设置了文件状态标志的O_APPEND标志,则为该文件 offset应在每次写入之前设置为文件的末尾,否则 干预文件修改操作应在更改之间进行 文件偏移和写操作。
答案 0 :(得分:4)
POSIX中定义的write
调用完全没有原子性保证。所以你不需要确认任何东西,它不是原子的。
如果成功完成,它甚至不能保证数据已经到达硬盘驱动器(如果有驱动器)。成功读回数据也不会给你任何保证。
您需要使用sync
系列函数来获得一些耐久性保证。