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

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

作者:互联网

在某些情况下,编码器不能依赖于原子的系统调用,例如如果文件在NFS文件系统上. (约NFS Overview, FAQ and HOWTO Documents).但是大多数数据库工作最终都需要原子系统调用. (参见Atomicity of database systems).

是否有标准(和OS独立)方式确认写入(和其他系统调用)在C(或python)中的特定FILE上是原子的.

有什么建议?

后续说明:管道的原子性将在下面讨论:

> unix pipe multiple writers
> What happens if a write system call is called on same file by 2 different processes simultaneously

请特别注意“man”页面提取专门处理O_APPEND:

If the O_APPEND flag of the file status flags is set, the file
offset shall be set to the end of the file prior to each write and no
intervening file modification operation shall occur between changing
the file offset and the write operation.

解决方法:

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

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

您需要使用同步系列函数来获得一些耐久性保证.

标签:python,c-3,portability,system-calls,atomicity
来源: https://codeday.me/bug/20190626/1293936.html