Python 如何通过编程确定;写下;系统调用在特定文件上是原子的?

Python 如何通过编程确定;写下;系统调用在特定文件上是原子的?,python,c,portability,system-calls,atomicity,Python,C,Portability,System Calls,Atomicity,在某些情况下,编码器不能依赖原子的系统调用,例如,如果文件位于NFS文件系统上。(c.f.)。但大多数数据库工作最终都需要原子系统调用。(c.f.) 在C(或python)中,是否有一种标准的(和操作系统无关的)方法来确认特定文件上的写入(和其他系统调用)是原子的 有什么建议吗 后续注释:管道上的原子性将在以下内容中讨论: 请特别注意专门处理O_APPEND的“man”页摘录: 如果设置了文件状态标志的O_APPEND标志,则文件 每次写入之前,偏移量应设置为文件的末尾,且 文件修改操作

在某些情况下,编码器不能依赖原子的系统调用,例如,如果文件位于NFS文件系统上。(c.f.)。但大多数数据库工作最终都需要原子系统调用。(c.f.)

在C(或python)中,是否有一种标准的(和操作系统无关的)方法来确认特定文件上的写入(和其他系统调用)是原子的

有什么建议吗

后续注释:管道上的原子性将在以下内容中讨论:

请特别注意专门处理O_APPEND的“man”页摘录:

如果设置了文件状态标志的O_APPEND标志,则文件 每次写入之前,偏移量应设置为文件的末尾,且 文件修改操作应在更改之间进行 文件偏移量和写入操作

POSIX中定义的调用根本没有原子性保证。所以你不需要确认任何事情,它不是原子的

如果数据成功完成,它甚至不能保证数据已经到达硬盘(如果有硬盘的话)。成功读回数据也不能给您任何保证


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

我想您会发现数据库不需要原子系统调用:它们需要数据库的原子更新外观,但这是通过事务日志完成的。在任何时候,实际的数据库文件都可能不一致,但事务日志包含使其再次一致所需的信息。NFS只是充满了高度破坏、不一致的行为,这使得它不适合大多数用途。对于严重的网络文件系统使用,请使用smb/cifs/9p/除nfs以外的任何东西。大多数数据库采取的方法似乎是在文档中突出说明“不要在nfs上运行此功能”。
write
对管道有一些原子性保证,对常规文件有顺序保证。问题是“文件”在标题中,我们讨论了数据库工作。虽然你是对的,但我真的不认为提问者可以依靠这些保证来完成酸性工作。