gpt4 book ai didi

c - 如果 bash 脚本不存在,则原子创建文件

转载 作者:IT王子 更新时间:2023-10-29 00:02:54 26 4
gpt4 key购买 nike

在系统调用 open() 中,如果我用 O_CREAT | 打开O_EXCL,系统调用保证文件不存在时才会创建。原子性由系统调用保证。是否有类似的方法从 bash 脚本以原子方式创建文件?

更新:我发现了两种不同的原子方式

  1. 使用 set -o noclobber。然后您可以原子地使用 > 运算符。
  2. 只需使用 mkdir。 Mkdir 是原子的

最佳答案

100% 纯 bash 解决方案:

set -o noclobber
{ > file ; } &> /dev/null

如果不存在名为 file 的文件,此命令将创建一个名为 file 的文件。如果有一个名为 file 的文件,则什么都不做(但返回一个非零返回码)。

关于 touch 命令的优点:

  • 如果文件已经存在则不更新时间戳
  • 100% bash 内置
  • 按预期返回代码:如果 file 已经存在或无法创建 file 则失败;如果 file 不存在但已创建则成功。

缺点:

  • 需要设置 noclobber 选项(但在脚本中没问题,如果您小心重定向,或者之后取消设置)。

我想这个解决方案实际上是使用 O_CREAT | 的 open 系统调用的 bash 对应物 | O_EXCL.

关于c - 如果 bash 脚本不存在,则原子创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com