如何以编程方式确定“写入”系统调用对特定文件是否是原子的?

时间:2011-10-05 11:02:47

标签: python c portability system-calls atomicity

在某些情况下,编码器不能依赖原子的系统调用,例如如果文件在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应在每次写入之前设置为文件的末尾,否则   干预文件修改操作应在更改之间进行   文件偏移和写操作。

1 个答案:

答案 0 :(得分:4)

POSIX中定义的write调用完全没有原子性保证。所以你不需要确认任何东西,它不是原子的。

如果成功完成,它甚至不能保证数据已经到达硬盘驱动器(如果有驱动器)。成功读回数据也不会给你任何保证。

您需要使用sync系列函数来获得一些耐久性保证。