lockf -
устанавливает,
проверяет
или
удаляет
блокировку
POSIX на
открытом
файле
Standard C library (
libc,
-lc)
#include <unistd.h>
int lockf(int fd, int cmd, off_t len);
lockf():
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
Apply, test, or remove a POSIX lock on a section of an open file. The file is
specified by
fd, a file descriptor open for writing, the action by
cmd, and the section consists of byte positions
pos..
pos+
len-1 if
len is positive, and
pos-
len..
pos-1 if
len is negative, where
pos is the current file position, and if
len is zero, the
section extends from the current file position to infinity, encompassing the
present and future end-of-file positions. In all cases, the section may extend
past current end-of-file.
В 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), если
блокировка
установлена
другим
процессом.
On success, zero is returned. On error, -1 is returned, and
errno is set
to indicate the error.
-
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).
Русский
перевод
этой
страницы
руководства
был сделан
Artyom Kunyov <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Katrin Kutepova <
[email protected]>,
Konstantin Shvaykovskiy <
[email protected]>, Yuri Kozlov
<
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]