boost interprocess file_lock не может заблокировать файл, который ему не принадлежит

Когда я использую boost file_lock, чтобы попытаться заблокировать файлы, которые ему не принадлежат, с помощью lock() или lock_shaable(), он выдает исключение. Есть ли способ заблокировать файл, принадлежащий другому пользователю, чтобы он мог безопасно изменить его (изменяющий пользователь имеет правильные права на запись).


person user788171    schedule 01.08.2011    source источник
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
comment
Выдается ошибка с правами доступа к файлам. Если мы изменим владельца файла, который хотим заблокировать, на пользователя, пытающегося заблокировать, это сработает. По сути, я хочу, чтобы два пользователя могли заблокировать рассматриваемый файл, но, очевидно, только один пользователь может владеть файлом. - person user788171; 01.08.2011
comment
Разве нельзя установить разрешение на уровне группы? Например, в Linux/Unix вы можете установить владельца, а также права доступа на чтение/запись/выполнение для других пользователей через chown и chmod. В Windows у вас есть довольно тонкое управление через ACL. - person Jason; 02.08.2011