Linux 上的原子文件创建?

2023-12-28

如果文件不存在,我需要创建一个文件,这样尝试创建该文件的另一个进程就会失败。我需要甚至在创建过程完成向其中写入实际数据之前就将文件视为“已创建”。

我读到O_EXCL标记为open(),看来解决方案是存在的,但是我有几个问题:

  1. 你有这种技术的经验吗?有多好? (我想我不能拥有数据库级别的原子性,但是足够好就是......好吧,足够了)
  2. 我应该立即关闭文件吗open()这样它就被认为已创建,然后重新打开它进行写入?
  3. 有什么微妙之处需要注意吗?

The open() 手册页 http://linux.die.net/man/2/open说你的方法在 NFS 上可能会失败。

来自 O_EXCL 部分:

当与 O_CREAT 一起使用时,如果文件 已经存在,这是一个错误,并且 open() 将失败。在此背景下,一个 符号链接存在,无论 它指向哪里。 O_EXCL 已损坏 在 NFS 文件系统上;程序其中 依靠它来执行锁定 任务将包含竞争条件。

它提出了一个更通用的解决方案:

执行原子操作的解决方案 使用锁定文件的文件锁定是 在同一文件上创建唯一的文件 系统(例如,合并主机名 和 pid),使用 link(2) 建立链接 到锁文件。如果 link() 返回 0, 锁定成功。否则,使用 stat(2) 在唯一文件上检查是否 它的链接计数已增加到 2, 这种情况下锁也是 成功的。

请参阅《使用文件作为锁》部分这个网页 http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/avoid-race.html有关各种问题和方法的更多详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 上的原子文件创建? 的相关文章

  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 基于原型继承的语言中的类使用

    The 以下回答这个问题 https stackoverflow com questions 186244 what does it mean that javascript is a prototype based language很好地
  • 分解字符串并为带有分隔符前面文本的数组设置键?

    有没有办法接受这样的输入 testing one two three setting more testing 并得到这样的东西 array testing one two three array setting more testing
  • 为什么 `map.has()` 不充当类型保护

    我遇到了以下问题 在我的应用程序中 我有一个Map其中一组 lambda 函数与一些函数配对Roles 每个 lambda 需要一个secondParameter并返回一个settings object enum Role ROLE 1 r
  • unity:游戏对象不可见?

    我组合了两个可以显示透明度和截止 Alpha 的着色器 它工作得很好 只有两个小问题 1 在某些特定的摄像机角度下 对象的截止区域是可见的 仅当具有相同着色器的另一个对象位于该对象后面时 2 如果我淡出一个对象 它会变得黑色而不透明 我是着
  • 具有加密/密码保护的 SQLite

    我刚刚学习使用 SQLite 我很好奇这是否可能 数据库文件加密 密码保护数据库的打开 附言 我知道有这个 SQLite Encryption Extension SEE 但根据文档 SEE 是许可软件 和 SEE 永久源代码许可证的成本为
  • IE11间歇性不加载页面

    我们的许多用户报告说 他们在使用 IE11 访问我们的网站时遇到空白页面 有时他们甚至没有得到空白页面 浏览器只是停留在最后访问的页面上 这些用户可以毫无问题地访问其他域 例如 google com 对于出现故障的浏览器 如果这些用户在 I
  • Woocommerce 结账页面内部服务器错误

    我在 woocommerce 的结帐页面中遇到 500 内部服务器错误 虽然订购简单的产品 但它工作正常 但是当与可预订产品一起使用时 预订订单将保存在管理面板中 邮件也会发送 但订单收据不会显示在结帐页面中 在此 wc ajax chec
  • 根据 MA​​TLAB 中的数据值使用标记填充颜色

    我正在使用 matlab 绘制三个数据系列 例如 0 4545 0 7676 10 0 3232 0 5432 20 假设这是一个 100 x 3 矩阵 我们称其为A 也是根据A 1 排序的 第三列是一个附加数字 范围从1到100 我正在使
  • Jacoco:查找外部测试的代码覆盖率

    我最近在 eclipse 中使用 EclEmma 插件来查找应用程序中 JUnit 的代码覆盖率 效果非常好 在下一步中 我希望能够找到从外部调用我们的应用程序的端到端测试 功能测试的代码覆盖率 它们驻留在单独的服务器上 基本上 我们将应用
  • 如何检测HTML5视频是否暂停缓冲?

    我正在尝试测试视频是否断断续续 我注意到pause当视频暂停缓冲时 不会触发事件 检测视频是否已暂停缓冲的最佳方法是什么 我通过检查玩家的进度来做到这一点x毫秒 例如50 如果玩家的进步没有达到预期 那么我们就会进行缓冲 这是相当可靠的 因
  • 在 MySQL 中使用 LIMIT 根据列值限制结果 (PHP/MySQL)

    我多次搜索这个问题的答案 在 SO 和其他地方 但没有找到真正符合我需求的答案 如果有 我提前道歉 我有一个使用 PHP 的查询 它从数据库 WordPress 返回一个数组 基本上我想做的是查看列的值 然后根据该值进行 LIMIT 这是为
  • Python - 成功使用 Cookie

    当我尝试使用 facebook cookie 在 facebook 上打开登录帐户时 import urllib2 urllib cookielib jar cookielib CookieJar cookie urllib2 HTTPCo
  • PHP array_rand 返回唯一键吗?

    如果我打电话array rand array 100 它是否可以避免多次选择相同的键 是的 在one调用的返回集应该是唯一的
  • 将日期组件(整数)转换为字符串

    我的代码采用 NSDate 并读取年 月和日 然后将它们串在一起作为一个整数 接下来我想将这个 Int 转换为 String 以便可以将其插入 URL String 但没有成功 let calendarUnits NSCalendarUni
  • 如何将 CKEditor 集成到 Asp.net MVC 中

    Saw 这个帖子 http www codeproject com KB aspnet fckeditor aspx在 FCKEditor 的 CodeProject 上 有人可以解释一下新版本的情况吗 实际上这很容易做到 首先从官网下载最
  • WebSocket 的 API 网关

    我的 websocket 应用程序需要一个 API 网关 分析并识别来自某些IP的异常请求 配额和速率限制 统计数据 免费或商业 性能稳定 我的WebSocket的子协议是WAMP 所以恐怕没有现有的产品可以完成这项工作 我打算开发一个并假
  • 使用 JavaScriptSerializer.DeserializeObject 如何取回使用不区分大小写的字符串比较器的字典?

    我有一些需要反序列化的 JSON 所以我使用 JavaScriptSerializer DeserializeObject 如下所示 var jsonObject serializer DeserializeObject line as D
  • 在 netbeans 中为 Maven 项目设置自定义运行时类路径

    当我从 netbeans 中运行 Maven 项目时 我想添加自定义类路径 到目前为止 我已经尝试将以下内容添加到运行项目项目属性中的操作 exec args classpath classpath c QUASR duplicateRem
  • EF Core 3.0 中的存储过程

    如何在 EF Core 3 0 中使用存储过程 我尝试过以下方法 var user await context Query
  • Linux 上的原子文件创建?

    如果文件不存在 我需要创建一个文件 这样尝试创建该文件的另一个进程就会失败 我需要甚至在创建过程完成向其中写入实际数据之前就将文件视为 已创建 我读到O EXCL标记为open 看来解决方案是存在的 但是我有几个问题 你有这种技术的经验吗