在某些情况下,编码器不能依赖系统调用是原子的,例如如果文件位于 NFS 文件系统上。 (参见NFS 概述、常见问题解答和 HOWTO 文档)。但大多数数据库工作最终都需要原子系统调用。 (参见数据库系统的原子性).
是否有一种标准(且独立于操作系统)方法来确认 C(或 python)中特定文件的写入(和其他系统调用)是原子的。
有什么建议么?
后续注释:管道上的原子性将在下面讨论:
- unix管道多个作家
- 如果两个不同的进程同时对同一文件调用写入系统调用,会发生什么情况
请特别注意专门处理 O_APPEND 的“man”页面摘录:
如果文件状态标志的 O_APPEND 标志被设置,则文件
偏移量应在每次写入之前设置为文件末尾,并且不
干预文件修改操作应在更改之间发生
文件偏移量和写操作。
The writePOSIX 中定义的调用根本没有原子性保证。所以你不需要确认任何事情,它不是原子的。
如果成功完成,它甚至不保证数据将到达硬盘驱动器(如果有驱动器的话)。成功读回数据也不能为您提供任何保证。
您需要使用sync
系列函数以获得一些持久性保证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)