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 上的原子文件创建? 的相关文章

  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配

随机推荐

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

    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 看来解决方案是存在的 但是我有几个问题 你有这种技术的经验吗