boost interprocess file_lock 无法锁定它不拥有的文件
Posted
技术标签:
【中文标题】boost interprocess file_lock 无法锁定它不拥有的文件【英文标题】:boost interprocess file_lock can't lock file it does not own 【发布时间】:2011-08-01 17:55:53 【问题描述】:当我使用 boost file_lock 尝试使用 lock() 或 lock_sharable() 锁定不属于它的文件时,它会引发异常。有什么方法可以锁定其他用户拥有的文件,以便可以安全地修改它(修改用户具有正确的写入权限)。
【问题讨论】:
file_lock 不用于锁定文件。它是一种跨进程互斥锁,它使用文件来强制锁定。它是使用文件实现的锁定,与实际锁定文件以供访问无关。 是的,我明白在这种情况下文件锁是什么。我的问题只是我无法锁定我不拥有的文件,并且想知道是否有任何可能的解决方法。 【参考方案1】:您抛出异常的事实意味着它没有等待任何现有的独占或可共享锁被释放(这应该是一个阻塞调用)。确保您确实拥有正确的文件名,或者检查使用what()
、get_native_error()
或get_error_code()
方法抛出的boost::interprocess_exception
中的错误代码。例如,您可能遇到文件权限问题,或者文件可能不存在等。由于锁争用,不会引发异常,所以这不是您的问题...
【讨论】:
抛出的错误是文件权限。如果我们将要锁定的文件的所有者更改为尝试锁定的用户,它就可以工作。基本上,我希望两个用户能够锁定有问题的文件,但显然,只有一个用户可以拥有该文件。 没有可以设置的组级权限吗?例如,在 Linux/Unix 上,您可以通过chown
和chmod
为其他用户设置所有者以及读/写/执行访问权限。在 Windows 上,您可以通过 ACL 进行非常精细的控制。以上是关于boost interprocess file_lock 无法锁定它不拥有的文件的主要内容,如果未能解决你的问题,请参考以下文章
boost::interprocess_mutex 与进程本地 boost::mutex
boost::interprocess::interprocess_condition::wait 在等待时不会原子地解锁互斥锁
boost::interprocess::message_queue 权限被拒绝
Boost.interprocess Vector 作为类成员