c++ - 防止从不同进程打开文件两次

标签 c++ c macos file-locking

经过我的研究,我仍然不确定是否有 API 允许您以独占方式打开文件,这意味着任何其他进程都无法访问该文件。 请有人给我一份涵盖该主题的良好引用/指南/注释/手册吗?
非常感谢!

编辑:建议锁定就足够了。

最佳答案

进程间的文件锁定主要有以下三种系统:

一些类 Unix 系统可能没有 flock();例如,它们可能有 lockf() 代替,或者它们可能只有 fcntl() 锁定(尽管大多数都有 lockf()fcntl(),许多人也会有 flock())。当前版本的 POSIX 要求使用 fcntl() 锁定和 lockf() 锁定来实现文件级进程间锁定。 (POSIX 还定义了 flockfile()funlockfile()ftrylockfile() — 它们用于控制应用程序中线程之间的锁定)。

AFAIK,您可以使用 fcntl() 锁定实现 lockf()flock() 锁定。

请注意,锁定函数适用于文件描述符或文件流。每个程序都可以打开该文件,但随后会应用咨询锁定调用来检查它是否具有对该文件的独占访问权限。

请注意,某些系统支持强制文件锁定(通过在文件上设置 setgid 位来指示,而相应的组执行位未设置 - 例如 2644 模式)。但是,Mac OS X 不支持强制锁定(10.10 Yosemite 测试过,但之前的版本也有此限制)。 POSIX 不需要强制锁定支持。它是在 SVR4 系统上提供的。

关于c++ - 防止从不同进程打开文件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26886462/

相关文章:

c++ - 我如何试验垃圾收集?

c++ - 需要编写一个函数来检查数组 A1 是否包含在数组 A2 中;否则返回假

c++ - Visual Studio C 或 C++ 中的最大值

macos - 如何在我的 Mac 上安装 JavaFx 2.0?

c++ - 结合 boost unordered_map、bind 和 std::find_if

c++ - ifstream.eof() 在 C++ 中未评估为真

c++ - 定义数组时是否可以接受const_cast?

python - 在 Mac 10.8 64 位上使用 SWIG 和 distutils 包装包括 Python API 在内的 C 代码失败

macos - 智能 : Including jars in a jar artifact

objective-c - 使用 Xcode 9 构建时,Sierra 上缺少 ColorSync 框架