Устанавливает POSIX-блокировку на открытом файле, проверяет ее наличие или
снимает ее с файла. Файл определяется параметром
fd.
Данная функция - всего лишь более удобный способ вызова
fcntl(2).
Список существующих операций приведен ниже:
F_LOCK
(устанавливает блокировку на файле. Только один процесс может блокировать
данный файл в текущий момент времени. Если файл уже блокирован, то он будет
блокирован позже, когда будет снята предыдущая блокировка.);
F_TLOCK
(то же самое, что и
F_LOCK,
но не блокирует файл, а возвращает сообщение об ошибке,
если файл уже заблокирован в данный момент);
F_ULOCK
(снимает блокировку с файла);
F_TEST
(проверяет наличие блокировки: возвращает 0, если
fd
не блокирован или заблокирован данным (текущим) процессом;
возвращается -1; значение
errno
меняется на
EACCES,
если файл занят другим процессом);
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При нормальном завершении работы возвращается ноль.
При ошибках возвращается -1 и переменная
errno
изменяется соответственно ошибке.
НАЙДЕННЫЕ ОШИБКИ
EAGAIN
(файл блокирован и установлен флаг
LOCK_NB ,
или операция запрещается, поскольку файл
отражен в память другим процессом);
EBADF
(fd
не является описателем открытого файла);
EDEADLK
(выполнение операции блокирования должно привести
к зависанию программы);
EINVAL
(в
fd
была указана неправильная операция);
ENOLCK
(открыто слишком много сегментов для блокировки,
таблица блокировок переполнена).
СООТВЕТСТВИЕ СТАНДАРТАМ
SYSV
СМ. ТАКЖЕ
fcntl(2),
flock(2)
Дополнительную информацию можно найти в файлах
locks.txt
и
mandatory.txt
из каталога
/usr/src/linux/Documentation.