Существует три основные системы для блокировки файлов между процессами:
Некоторые Unix-подобные системы могут не иметь flock()
; они могут иметь, например, lockf()
, или они могут иметь только блокировку fcntl()
(хотя большинство из них будет иметь как lockf()
, так и fcntl()
, и многие из них также будут иметь flock()
). Текущая версия POSIX требует блокировки fcntl()
и блокировки для блокировки файлового уровня между файлами и lockf()
. (POSIX также определяет flockfile()
, funlockfile()
и ftrylockfile()
- которые используются для управления блокировкой между потоками в приложении).
AFAIK, вы можете использовать как lockf()
, так и flock()
блокировки с использованием fcntl()
блокировки.
Обратите внимание, что функции блокировки работают с файловыми дескрипторами или файловыми потоками. Каждая программа сможет открыть файл, но затем будет применять консультативные блокирующие вызовы, чтобы проверить, имеет ли он эксклюзивный доступ к файлу.
Обратите внимание, что некоторые системы поддерживают обязательную блокировку файлов (указывается путем установки бита setgid в файле, в то время как бит выполнения соответствующей группы не установлен - например, режим 2644). Однако Mac OS X не поддерживает обязательную блокировку (10.10 Yosemite проверено, но предыдущие версии также имеют это ограничение). POSIX не требует обязательной поддержки блокировки. Он был предоставлен в системах SVR4.
Вы имеете в виду «исключительно», а не «чрезмерно», верно? – trojanfoe
@trojanfoe - Конечно. Спасибо – Sanich
См. [Этот вопрос] (http://stackoverflow.com/questions/13603684/mandatory-file-locking-in-mac-os-x). – trojanfoe