【发布时间】:2012-11-29 11:53:02
【问题描述】:
在系统调用open()中,如果我用O_CREAT | O_EXCL打开,系统调用确保文件不存在时才会创建。原子性由系统调用保证。是否有类似的方法可以从 bash 脚本以原子方式创建文件?
更新: 我发现了两种不同的原子方式
- 使用 set -o noclobber。然后你可以原子地使用 > 操作符。
- 只需使用 mkdir。 Mkdir 是原子的
【问题讨论】:
-
系统调用确保文件不存在时才会创建 Hmpf。如果文件不存在,则会创建它。如果存在,系统调用将失败。
-
您可以尝试
mktemp创建一个文件,然后尝试mv将其改成所需的名称。 -
您从哪里得知“Mkdir 是原子的”?手册页没有说明它(不是)是原子的。此外,手册页并未声称
noclobber选项是原子的。你从哪里得到的?