flock - устанавливает или снимает "мягкую" блокировку(advisory lock) открытого файла
НАЗВАНИЕflock - устанавливает или снимает "мягкую" блокировку
(advisory lock) открытого файла
СИНТАКСИС
#include
int flock(int fd, intoperation);
ОПИСАНИЕ
Устанавливает или снимает "мягкую" блокировку открытого
файла. Файл задается описателем файла fd.
Допустимы следующие операции:
LOCK_SH (разделяемая блокировка. Несколько
процессов одновременно могут держать
разделяемую блокировку файла
одновременно.);
LOCK_EX (исключительная блокировка. Только один
процесс в каждый
момент времени может держать
исключительную блокировку файла.);
LOCK_UN (разблокировать файл);
LOCK_NB (не блокировать файл, когда он уже
заблокирован; это значение может быть
задано с помощью операции
логическогосложения или с помощью других
операций).
Файл не может иметь одновременно разделяемую и
исключительную блокировку. Блокируется файл (т.е. inode),
а не описатель файла. Поэтому dup(2) и fork(2) не создают
нескольких копий (instances) блокировки.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успешного завершения возвращается нулевое
значение. При ошибке возвращается -1, а переменная errno
приобретает соответствующее значение.
КОДЫ ОШИБОК
EWOULDBLOCK
Файл заблокирован, а при вызове функции был задан
флаг LOCK_NB.
СООТВЕТСТВИЕ СТАНДАРТАМ
4.4BSD (вызов flock(2) впервые появился в 4.2BSD).
ЗАМЕЧАНИЯ
flock(2) не блокирует файлы, расположенные в файловой
системе NFS; используйте для этого fcntl(2). Требуются
более свежие версии Linux и сервера, поддерживающие
блокировку.
Блокировки, обеспечиваемые системными вызовами flock(2) и
fcntl(2), имеют различную относительно порожденных
процессов и
вызова dup(2) семантику.