c++ - 如何在C++中以独占模式打开文件

标签 c++ io

我正在用 C++ 实现一些文件系统。到目前为止,我一直在使用 fstream,但我意识到无法以独占模式打开它。由于线程很多我想允许多次读取,而以写入模式打开文件时我想以独占模式打开文件?
最好的方法是什么?我认为 Boost 提供了一些功能。还有其他可能吗?我也想看看简单的例子。如果用 C++ 做起来不容易/不好,我也可以用 C 来写。

我正在使用 Windows。

最佳答案

在许多操作系统上,这是不可能的,所以 C++ 不支持它。您必须编写自己的 streambuf。 如果您担心的唯一平台是 Windows,您可以 可能使用它提供的打开独占模式。 但是,您更有可能希望使用某种文件 锁定,更精确,并且在大多数情况下可用 所有平台(但不可移植——你需要 LockFileEx 在 Windows 下,fcntl 在 Unix 下)。

在 Posix 下,您还可以使用 pthread_rwlock。布滕霍夫 给出了使用经典互斥锁的实现和 条件变量,存在于 C++11 中,因此您可以 实际上实现了一个便携版本(提供所有的 读者和作者在同一个进程中——Posix 请求将跨进程边界工作,但这不是 对于 C++ 线程原语为真)。

关于c++ - 如何在C++中以独占模式打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16141018/

相关文章:

c++ - 尝试在 mac 上安装 Cmake 时出现安装错误

c++ - 通过 eventFilter 获取 QLineEdit 的某些属性到剪贴板

c++ - 严重错误 -> c0000374

c++ - 如何让我的 C++ 程序更快地构建 Trie 结构?

c++ - 非常量表达式的左值到右值转换的结果是常量吗?

java - 底层流返回零字节

c - 当 printk() 驻留的内核函数未被调用(根据 ftrace)时,为什么 printk() 会在 syslog 内部连续打印?

Haskell:将计算结果写入文件

c - 如何在C中读取字节直到遇到某个字符

c++ - 成员值是否在构造函数初始化列表执行之前初始化?