sys_flock  [fs/locks.c]


Applies or removes an advisory lock on an open file.

Arguments

eax 143
ebx File descriptor.
ecx Operation to apply. It should be one of the following predefined values:
LOCK_SH  A shared lock.
LOCK_EX An exclusive lock.
LOCK_UN Remove an existing lock.
LOCK_MAND A `mandatory' flock. This exists to emulate Windows Share Modes. It can be combined with LOCK_READ or to allow other processes read and write access respectively.

Return values

If the system call succeeds the return value is 0.
If the system call fails the return value is one of the following errno values:

-EINTR While waiting to acquire a lock, the call was interrupted by delivery of a signal caught by a handler.
-EBADF ebx is not a valid, open, file descriptor.
-EINVAL ecx specifies invalid operation value.
-EWOULDBLOCK The file is locked and the LOCK_NB flag was selected.
-ENOLCK The kernel ran out of memory for allocating lock records.

Remarks

A single file may not simultaneously have both shared and exclusive locks.

Duplicate file descriptors (created by, for example, sys_fork or sys_dup) refer to the same lock, and this lock may be modified or released using any of these descriptors. Furthermore, the lock is released either by an explicit LOCK_UN operation on any of these duplicate descriptors, or when all such descriptors have been closed.

sys_flock does not lock files over NFS. Use sys_fcntl instead: that does work over NFS, given a sufficiently recent version of Linux and a server which supports locking.

sys_flock places advisory locks only; given suitable permissions on a file, a process is free to ignore the use of this sytem call and perform I/O on the file.

Converting a lock (shared to exclusive, or vice versa) is not guaranteed to be atomic: the existing lock is first removed, and then a new lock is established. Between these two steps, a pending lock request by another process may be granted, with the result that the conversion either blocks, or fails if LOCK_NB was specified.

Compatibility

n/a