Linux repositories inspector
GNU
2019-03-06

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

lockf - устанавливает, проверяет или удаляет блокировку POSIX на открытом файле

ОБЗОР

#include <unistd.h>
int lockf(int fd, int cmd, off_t len);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
lockf():
_XOPEN_SOURCE >= 500
|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE
|| /* версии gibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

Устанавливает, проверяет наличие или удаляет блокировку POSIX с области открытого файла. Файл задаётся в параметре fd — файловым дескриптором, открытым на запись — действие — в cmd, а область указывается как позиции байт pos..pos+len-1, если len положительно, и pos-len..pos-1, если len отрицательно, где pos — текущая позиция в файле и, если len равно нулю, то область расширяется от текущей позиции файла до бесконечности, охватывая текущую и будущие позиции конца файла. Во всех случаях область может расширяться за текущий конец файла.
В Linux lockf() — всего лишь более удобный способ вызова fcntl(2) для блокировки. Во многих других системах реализация lockf() сделана подобным образом, но заметим, что в POSIX.1 нет явной связи между блокировками lockf() и fcntl(2). Переносимое приложение, вероятно, должно избегать использования этих двух вызовов одновременно.
Список существующих операций приведён ниже:
F_LOCK Устанавливает исключительную блокировку указанной области файла. Если эта область (или её часть) уже блокирована, то вызов заблокирует выполнение до тех пор, пока не будет снята предыдущая блокировка. Если эта область перекрывается с ранее заблокированной областью, то они объединяются. Файловые блокировки снимаются сразу после того, как установивший их процесс закрывает файловый дескриптор. Дочерние процессы не наследуют подобные блокировки.
F_TLOCK
То же самое, что и F_LOCK, но вызов никогда не блокирует выполнение и возвращает ошибку, если файл уже заблокирован.
F_ULOCK
Снимает блокировку с заданной области файла. Может привести к тому, что блокируемая область будет поделена на две заблокированные области.
F_TEST Проверяет наличие блокировки: возвращает 0, если указанная область не заблокирована или заблокирована вызвавшим процессом; возвращает -1, меняет значение errno на EAGAIN (в некоторых системах на EACCES), если блокировка установлена другим процессом.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

EACCES или EAGAIN
Файл блокирован и указана операция F_TLOCK или F_TEST, или операция запрещена, так как файл отображён в память другим процессом.
EBADF Значение fd не является открытым файловым дескриптором, или значение cmd равно F_LOCK или F_TLOCK и файловый дескриптор fd не открыт на запись.
EDEADLK
Вызвана операция F_LOCK, которая приводит к вечной блокировке (deadlock).
EINTR При ожидании получения блокировки вызов был прерван сигналом, пришедшим в обработчик; смотрите signal(7).
EINVAL В cmd указана неправильная операция.
ENOLCK Открыто слишком много областей для блокировки, таблица блокировок переполнена.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
Интерфейс Атрибут Значение
lockf() Безвредность в нитях MT-Safe

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008, SVr4.

СМОТРИТЕ ТАКЖЕ

fcntl(2), flock(2)
Смотрите также файлы locks.txt и mandatory-locking.txt из каталога Documentation/filesystems с исходным кодом ядра Linux (в старых ядрах эти файлы были в каталоге Documentation, а mandatory-locking.txt назывался mandatory.txt).
⇧ Top