FLOCK   (2) manpage
FLOCK
2
2002-04-24
Linux
Linux Programmer's Manual
  • NAME
      flock - apply or remove an advisory lock on an open file
  • SYNOPSIS
      #include <sys/file.h>

      "int flock(int " fd ", int " operation );
  • DESCRIPTION
      Apply or remove an advisory lock on the open file specified by fd . The parameter operation is one of the following:


      LOCK_SH
      Place a shared lock. More than one process may hold a shared lock for a given file at a given time.
      LOCK_EX
      Place an exclusive lock. Only one process may hold an exclusive lock for a given file at a given time.
      LOCK_UN
      Remove an existing lock held by this process.


      A call to flock () may block if an incompatible lock is held by another process. To make a non-blocking request, include LOCK_NB (by OR ing) with any of the above operations.
      A single file may not simultaneously have both shared and exclusive locks.
      Locks created by flock () are associated with a file, or, more precisely, an open file table entry. This means that duplicate file descriptors (created by, for example, fork "(2) or " dup(2) ) 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.
      A process may only hold one type of lock (shared or exclusive) on a file. Subsequent flock () calls on an already locked file will convert an existing lock to the new lock mode.
      Locks created by flock () are preserved across an execve(2) .
      A shared or exclusive lock can be placed on a file regardless of the mode in which the file was opened.
  • RETURN VALUE
      On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.
  • ERRORS
      EWOULDBLOCK
      The file is locked and the LOCK_NB flag was selected.
      EBADF
      fd is not a not an open file descriptor.
      EINTR
      While waiting to acquire a lock, the call was interrupted by delivery of a signal caught by a handler.
      EINVAL
      operation is invalid.
      ENOLCK
      The kernel ran out of memory for allocating lock records.
  • CONFORMING TO
      4.4BSD (the flock(2) call first appeared in 4.2BSD). A version of flock(2) , possibly implemented in terms of fcntl(2) , appears on most Unices.
  • NOTES
      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.

      Since kernel 2.0, flock(2) is implemented as a system call in its own right rather than being emulated in the GNU C library as a call to fcntl(2) . This yields true BSD semantics: there is no interaction between the types of lock placed by flock(2) and fcntl(2) , and flock(2) does not detect deadlock.

      flock(2) places advisory locks only; given suitable permissions on a file, a process is free to ignore the use of flock(2) and perform I/O on the file.

      flock(2) and fcntl(2) locks have different semantics with respect to forked processes and dup(2) .
  • SEE ALSO
Current Users: 19 © 1999-2006 Linux.com.hk PenguinSoft
All trademarks and copyrights on this page are owned by their respective companies. Linux is a trademark of Linus Torvalds.