Когда я использую boost file_lock, чтобы попытаться заблокировать файлы, которые ему не принадлежат, с помощью lock() или lock_shaable(), он выдает исключение. Есть ли способ заблокировать файл, принадлежащий другому пользователю, чтобы он мог безопасно изменить его (изменяющий пользователь имеет правильные права на запись).
boost interprocess file_lock не может заблокировать файл, который ему не принадлежит
comment
file_lock не используется для блокировки файлов. Это подразумевается как мьютекс между процессами, который использует файл для принудительной блокировки. Это блокировка, реализованная с использованием файла, и НИЧЕГО не имеет общего с фактической блокировкой файла для доступа.
- person Joe   schedule 01.08.2011
comment
да, я понимаю, что такое блокировка файла в этом контексте. моя проблема просто в том, что я не могу заблокировать файл, которым я не владею, и хотел бы знать, есть ли какие-либо возможные обходные пути.
- person user788171   schedule 02.08.2011
Ответы (1)
Тот факт, что вы создаете исключение, означает, что оно не ожидает освобождения каких-либо существующих эксклюзивных или разделяемых блокировок (это должен быть блокирующий вызов). Убедитесь, что у вас действительно правильное имя файла, или проверьте код ошибки в boost::interprocess_exception
, который выдается с помощью методов what()
, get_native_error()
или get_error_code()
. Например, у вас может быть проблема с правами доступа к файлу, или файл может не существовать и т. д. Исключение не выдается из-за конфликта блокировок, так что это не ваша проблема...
person
Jason
schedule
01.08.2011
Выдается ошибка с правами доступа к файлам. Если мы изменим владельца файла, который хотим заблокировать, на пользователя, пытающегося заблокировать, это сработает. По сути, я хочу, чтобы два пользователя могли заблокировать рассматриваемый файл, но, очевидно, только один пользователь может владеть файлом.
- person user788171; 01.08.2011
Разве нельзя установить разрешение на уровне группы? Например, в Linux/Unix вы можете установить владельца, а также права доступа на чтение/запись/выполнение для других пользователей через
chown
и chmod
. В Windows у вас есть довольно тонкое управление через ACL.
- person Jason; 02.08.2011