flock - Apply or remove an advisory lock on an open file
#include <sys/fcntl.h>
int flock(
int filedes,
int operation );
Specifies a file descriptor returned by a successful
open() or fcntl() function, identifying the file to which
the lock is to be applied or removed. Specifies one of
the following constants for flock(), defined in the
<sys/fcntl.h> file: Apply a shared lock. Apply an exclusive
lock. Do not block when locking. This value can be
logically ORed with either LOCK_SH or LOCK_EX. Remove a
lock.
The flock() function applies or removes an advisory lock
on the file associated with the filedes file descriptor.
Advisory locks allow cooperating processes to perform consistent
operations on files, but do not guarantee consistency
(that is, processes may still access files without
using advisory locks, possibly resulting in inconsistencies).
You can use the flock() function to coordinate a file's
lock status on local, CFS, and NFS file systems.
The locking mechanism allows two types of locks: shared
locks and exclusive locks. At any time multiple shared
locks may be applied to a file, but at no time are multiple
exclusive, or both shared and exclusive, locks allowed
simultaneously on a file.
A shared lock may be upgraded to an exclusive lock, and
vice versa, simply by specifying the appropriate lock
type. This results in the previous lock being released and
the new lock applied (possibly after other processes have
gained and released the lock).
Requesting a lock on an object that is already locked normally
causes the caller to be blocked until the lock may
be acquired. If LOCK_NB is included in operation, then
this will not happen; instead, the call will fail and
errno will be set to [EWOULDBLOCK].
Locks are on files, not file descriptors. This means that:
Locks are not inherited by a child process resulting from
a fork() call. All locks associated with a file for a
given process are removed when the process closes any file
descriptor for that file.
Processes that are blocked awaiting a lock may be awakened
by signals.
The flock() interface is not part of any UNIX standard.
Therefore, if you are designing and writing applications
to be portable across platforms, you should use the
fcntl() file locking interface instead of flock().
Upon successful completion, 0 (zero) is returned. Otherwise,
-1 is returned and errno is set to indicate the
error.
If the flock() function fails, errno may be set to one of
the following values: The file is locked and the LOCK_NB
option was specified. The filedes argument is not a valid
open file descriptor. A signal interrupted the flock()
call. The operator is not valid. The lock table is full.
Too many regions are already locked. The lock is blocked
by some lock from another process. Putting the calling
process to sleep while waiting for that lock to become
free would cause a deadlock.
Functions: close(2), exec(2), fcntl(2), fork(2), open(2),
lockf(3)
flock(2)
[ Back ] |