可能重复:
从 std::fstream 获取 FILE*
我需要访问文件描述符,以便我可以使用flock()(或fcntl(),我不在乎)系统调用来创建和释放咨询文件锁。但我看不出有什么办法。也没有任何没有可怕黑客气味的替代方法。
有什么建议吗?我是否缺少实现文件锁定的明显方法?
可能重复:
从 std::fstream 获取 FILE*
我需要访问文件描述符,以便我可以使用flock()(或fcntl(),我不在乎)系统调用来创建和释放咨询文件锁。但我看不出有什么办法。也没有任何没有可怕黑客气味的替代方法。
有什么建议吗?我是否缺少实现文件锁定的明显方法?
看来我无法访问 [io] fstream 中的底层文件描述符。似乎也没有让我从现有文件描述符构建 [io]fstream 的 c'tors。这种解决我的锁定问题的方法显然是不可行的。
然而,我找到了另一个可行的解决方案来解决我的锁定问题:我将使用 boost::interprocess 同步机制(特别是 boost::interprocess::sharable_lock)来实现相同的目的。请参阅http://www.boost.org/doc/libs/1_52_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.sharable_upgradable_mutexes.sharable_upgradable_locks
在我实现了这个之后,我将报告难易度和额外的指针。
与其回到 C 世界,<mutex>
不如使用 C++ 中可用的任何其他线程功能。如果您无法访问 C++11 编译器,那么是时候升级了。
我相信这个问题向您展示了如何使用flock()(查看第一个答案)。请注意,这是答案而不是评论的唯一原因是因为我找不到评论按钮:)