打开 O_CREAT | Linux 中 NFS 上的 O_EXCL?

2023-11-27

当在 Linux 2.6 内核和 NFSv3 中时open("fname", O_CREAT|O_EXCL)生效了吗?目前的规范open(2)系统调用文档(http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html)说一切都很好:

  - O_EXCL  
   - ...  
      On NFS, O_EXCL is only supported when using NFSv3 or later on kernel  
      2.6 or later.  In NFS environments where O_EXCL support is not  
      provided, programs that rely on it for performing locking tasks will  
      contain a race condition.  Portable programs that want to perform  
      atomic file locking using a lockfile, and need to avoid reliance on NFS  
      support for O_EXCL, can  ...

这看起来好像所有 2.6 内核都可以,但是手册页变更日志(大约最新内核 2.6.23)开始指示有效性四年2.6.0 上线后,网络上充斥着董事会用户在过去一两年内谴责这种使用。我想在 RHEL 5 (2.6.18) 系统上使用此设置,但我无法确定它何时真正变得安全。有人有明确的答案吗?


显然,NFS 的人声称任何来自NFSv3和Linux2.6.5打开就可以了。

From http://nfs.sourceforge.net/#faq_d10:

  • D10. I'm trying to use flock()/BSD locks to lock files used on multiple clients, but the files become corrupted. How come?
    • 答:flock()/BSD 锁仅在 2.6.12 之前的 Linux NFS 客户端上本地起作用。使用 fcntl()/POSIX 锁来确保文件锁对其他客户端可见。
    • Here are some ways to serialize access to an NFS file.
      • 使用 fcntl()/POSIX 锁定 API。这种类型的锁定通过 NLM 协议或 NFSv4 跨多个客户端提供字节范围锁定。
      • 使用单独的锁定文件,并创建指向它的硬链接。请参阅 creat(2) 手册页的 O_EXCL 部分中的描述。
    • 值得注意的是,直到早期的 2.6 内核,O_EXCL 创建在 Linux NFS 客户端上都不是原子的。不要使用 O_EXCL 在多个 NFS 客户端之间创建并期望原子行为,除非您运行的内核更新于2.6.5.
    • ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开 O_CREAT | Linux 中 NFS 上的 O_EXCL? 的相关文章

  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • 从 php/linux 获取 pdf 的布局模式(横向或纵向)

    给定一个 PDF 如何使用 PHP lib 或 Linux 命令行工具获取 PDF 的布局模式 或相对宽度 高度 Using http www tecnick com public code cp dpage php aiocp dp tc
  • 未找到 Gem 命令

    我已经在 Ubuntu 10 10 32 位上安装了 gem apt get install gem y 但当我尝试跑步时 gem install something gem 我收到未找到命令的错误 bash gem command not
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • 使用 gcc 理解共享库

    我试图理解 C 中共享库的以下行为 机器一 cat one c include
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 将sql查询结果写入mysql中的文件

    我正在尝试使用 mysql 将查询结果写入文件 我在一些地方看到了有关 outfile 构造的一些信息 但似乎这只将文件写入正在运行 MySQL 的机器 在本例中是远程机器 即数据库不在我的本地机器上 或者 我还尝试运行查询并从 mysql
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na

随机推荐

  • Android应用程序的唯一ID

    Android应用程序的唯一ID是什么 是包名吗 一台设备上可以有两个具有相同包名的应用程序吗 有 2 个不同的东西 Java 包和 Android 应用程序包 第二个必须是唯一的 有一篇关于它的好文章here
  • 作为 Java 运行一个简单的文本文件

    我有一个简单的 txt 文件 里面有纯 Java 代码 就像 public class C public static void main String args System out println This is executed 该文
  • 如何扩展 Quartz 调度程序?

    我计划使用石英调度器因为我读到了很多关于它的好意见 我的问题如下 在任何给定时间 系统中都会有数千个触发器 大多数触发器只会触发一个事件并消失 此外 我很可能在分配后不得不取消许多工作 基于新的输入 Quartz 可以扩展到这个程度吗 推荐
  • 使用 Feed Exporter 将项目从 Scrapyd 保存到 Amazon S3

    将 Scrapy 与 amazon S3 结合使用相当简单 您可以设置 FEED URI s3 MYBUCKET feeds 名称 s 时间 s jl FEED FORMAT jsonlines AWS ACCESS KEY ID 访问密钥
  • 运行时是否需要请求互联网权限(Android)?

    对于 Android 我们需要在运行时请求权限 以确保用户更好地理解为什么需要权限 我知道对于像这样的权限来说这是正确的WRITE CALENDAR and ACCESS FINE LOCATION但似乎互联网不需要它 这并不奇怪 因为几乎
  • Xcode6 无法将服务器的响应解析为 plist

    我正在尝试将我的苹果开发者帐户添加到 Xcode Beta 3 以便我可以在 iPhone 中运行应用程序 但没有成功 我转到 Xcode gt 首选项 gt 帐户 gt 添加 Apple ID 然后我输入我的用户凭据并按 确定 我不认为这
  • 将视频插入图库 [Android Q]

    记录一个SurfeceView我正在使用第 3 方library 这个库需要一个路径 在我的例子中保存的输出 录制的视频 是保存的视频路径 mRenderPipeline EZFilter input this effectBmp addF
  • Codeblocks 的 Boost 库设置 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何在 Codeblocks Windows 中使用 boost 库 从 boost 网
  • 内置 WPF 控件如何管理附加事件的事件处理程序?

    我知道当您将对象注册到鼠标的附加事件时 就会出现内存泄漏 这就是为什么你需要使用弱事件模式 我对这种模式有一个问题 如果您想使用它 则无法在 XAML 代码中定义处理程序 对我来说 这意味着像这样的每个代码都会泄漏
  • 我的流媒体音频播放器在通话期间继续播放 - 无法让它停止! (安卓)

    我有一个由多项活动和一项服务组成的应用程序 主要活动是用于流音频的 UI 当用户按下播放按钮时 服务就会启动 传输音频并读取元数据 然后 元数据会被推送到 UI 如果可见 和通知栏 在接到电话之前 一切都按预期运行 我曾假设通过使用标准媒体
  • 当主机代码中声明常量内存时,CUDA如何访问设备内核中的常量内存?

    根据记录 这是家庭作业 因此请记住这一点 或多或少地提供帮助 我们使用常量内存来存储 掩码矩阵 该矩阵将用于在更大的矩阵上执行卷积 当我在主机代码中时 我使用 cudaMemcpyToSymbol 将掩码复制到常量内存 我的问题是 一旦将其
  • 访问 DI 容器

    我正在开始一个新项目并建立工作基础 出现了一些问题 我可能会在这里问很多问题 希望我能找到一些答案 第一步是处理对象的依赖关系 我决定采用依赖注入设计模式 我对此有些陌生 来处理应用程序的所有这些问题 在实际编码时我遇到了一个问题 如果一个
  • Rails:发出 POST 请求时无法验证 CSRF 令牌的真实性

    我要实现POST request给我本地的开发人员 如下所示 HTTParty post http localhost 3000 fetch heroku body gt type gt product 但是 从服务器控制台报告 Start
  • 以编程方式更改系统显示大小 Android N

    背景 Android N 具有更改系统的功能Display Size从设置中 除了以前存在的更改功能之外Font Size 更改显示尺寸 图片来源 pcmag com Question 如果一个应用程序有android permission
  • 使用 Java 为 OSX 编写可执行 .sh 文件

    所以我试图编写一个可执行的 sh 文件 这就是我目前编写的方式 Writer output null try output new BufferedWriter new FileWriter file2 output write shell
  • 从 WSL 2 内部访问在 Windows 中运行的本地主机 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在运行本地AEM服务器 in my Windows机 服务器正在运行本地主机 4502 我正在使用运行的 Ubuntu 发行版WSL 2为了我的发展 我想访问本地主机 4502在
  • 如何合并 Drupal 数据库更改

    我们目前使用 SVN 存储库来确保每个人的本地环境保持最新 然而 Drupal 网站开发有些棘手 因为您编写的任何自定义代码 例如 为节点主体编写的 PHP 代码 都存储在数据库中 并且 SVN 工作副本无法识别更改 目前有几个开发人员正在
  • 指向不完整类型的指针可以不完整吗?

    Can int 是一个不完整的类型 C 2018 6 2 5 1 说 在翻译单元内的各个点处 对象类型可以是不完整的 缺乏足够的信息来确定该类型对象的大小 或complete 有足够的信息 因此 如果类型的大小已知 则该类型似乎是完整的 6
  • Chrome DevTools 和扩展程序中的内容脚本之间进行通信

    我已经读过this但它不起作用 我做了很多搜索和实验都无济于事 我正在编写一个 Chrome 扩展 大控制台 目标是为 Chrome 开发者工具构建更好的控制台选项卡 这意味着我想在页面上下文中执行用户输入代码 并访问页面上的 DOM 和其
  • 打开 O_CREAT | Linux 中 NFS 上的 O_EXCL?

    当在 Linux 2 6 内核和 NFSv3 中时open fname O CREAT O EXCL 生效了吗 目前的规范open 2 系统调用文档 http www kernel org doc man pages online page