码迷,mamicode.com
首页 > 其他好文 > 详细

文件IO详解(十二)---原子操作之创建文件

时间:2016-10-01 12:56:02      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

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

文件IO详解(十二)---原子操作之创建文件

标签:

原文地址:http://www.cnblogs.com/frank-yxs/p/5925619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!