Developer's Daily | Unix by Example |
main | java | perl | unix | dev directory | web log |
flock ? apply or remove an advisory lock on an open file |
#include <sys/file.h> int flock(int fd, int operation) |
Apply or remove an advisory lock on an open file. The file is specified by fd. Valid operations are given below: |
LOCK_SH |
Shared lock. More than one process may hold a shared lock for a given file at a given time. |
||
LOCK_EX |
Exclusive lock. Only one process may hold an exclusive lock for a given file at a given time. |
||
LOCK_UN |
Unlock. |
||
LOCK_NB |
Don’t block when locking. May be specified (by or’ing) along with one of the other operations. |
A single file may not simultaneously have both shared and exclusive locks. A file is locked (i.e., the inode), not the file descriptor. So, dup(2) and fork(2) do not create multiple instances of a lock. |
On success, zero is returned. On error, ?1 is returned, and errno is set appropriately. |
EWOULDBLOCK |
The file is locked and the LOCK_NB flag was selected. |
4.4BSD (the flock(2) call first appeared in 4.2BSD). |
flock(2) does not lock files over NFS. Use fcntl(2) instead: that does work over NFS, given a sufficiently recent version of Linux and a server which supports locking. flock(2) and fcntl(2) locks have different semantics with respect to forked processes and dup(2). |
open(2), close(2), dup(2), execve(2), fcntl(2), fork(2). There are also locks.txt and mandatory.txt in /usr/src/linux/Documentation. |