LOCKF(3)

НАЗВАНИЕ
lockf - проверяет, устанавливает POSIX-блокировку на открытом файле или снимает ее с файла

СИНТАКСИС
#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

ОПИСАНИЕ
Устанавливает 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.