文件IO详解---原子操作之创建文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件IO详解---原子操作之创建文件相关的知识,希望对你有一定的参考价值。

    使用open打开文件时,使用 O_CREAT 标志的话,就会在不存在文件的情况下去创建文件。所以说实际应该是有两个操作,一个是判断文件是否存在,另一个就是创建文件;而且这两个操作是作为一个原子操作执行的。如果不是作为一个原子操作执行的,那么就会分解成如下的程序段:

技术分享

技术分享
    如果不作为一个原子操作执行那么在多进程中可能会出问题,假设两个操作不是作为原子操作执行的,当进程A在判断文件不存在后,便被挂起,进程B得以执行,然后创建了文件且向其中写入了数据,然后进程A被恢复,接着执行creat函数试图创建文件,而此时由于文件已存在,其中的内容会被truncate(截断)为 0 。这就导致了进程B的数据被擦除,出现错误。

以上是关于文件IO详解---原子操作之创建文件的主要内容,如果未能解决你的问题,请参考以下文章

八:并发编程之Atomic&Unsafe魔法类详解

Go语言自学系列 | golang并发编程之原子操作详解

Linux设备驱动程序 之 原子操作

java并发编程之原子操作

Unix系统编程()原子操作和竞争条件

Linux_Unix系统编程chapter5 深入探究文件IO