MirBSD manpage: flock(2)

FLOCK(2)                   BSD Programmer's Manual                    FLOCK(2)


     flock - apply or remove an advisory lock on an open file


     #include <fcntl.h>

     #define   LOCK_SH   1    /* shared lock */
     #define   LOCK_EX   2    /* exclusive lock */
     #define   LOCK_NB   4    /* don't block when locking */
     #define   LOCK_UN   8    /* unlock */

     flock(int fd, int operation);


     flock() applies or removes an advisory lock on the file associated with
     the file descriptor fd. A lock is applied by specifying an operation
     parameter that is one of LOCK_SH or LOCK_EX with the optional addition of
     LOCK_NB. To unlock an existing lock, operation should be LOCK_UN.

     Advisory locks allow cooperating processes to perform consistent opera-
     tions on files, but do not guarantee consistency (i.e., processes may
     still access files without using advisory locks possibly resulting in in-

     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 ex-
     clusive, locks allowed simultaneously on a file.

     A shared lock may be upgraded to an exclusive lock, and vice versa, sim-
     ply 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 in-
     cluded in operation, then this will not happen; instead the call will
     fail and the error EWOULDBLOCK will be returned.


     Locks are on files, not file descriptors. That is, file descriptors du-
     plicated through dup(2) or fork(2) do not result in multiple instances of
     a lock, but rather multiple references to a single lock. If a process
     holding a lock on a file forks and the child explicitly unlocks the file,
     the parent will lose its lock.

     Processes blocked awaiting a lock may be awakened by signals.


     Zero is returned if the operation was successful; on an error a -1 is re-
     turned and an error code is left in the global location errno.


     The flock() call fails if:

                   The file is locked and the LOCK_NB option was specified.

     [EBADF]       The argument fd is an invalid descriptor.

     [EINVAL]      The argument operation has an invalid value.

     [EOPNOTSUPP]  The referenced descriptor is not of the correct type.


     close(2), dup(2), execve(2), fcntl(2), fork(2), open(2)


     The flock() function call appeared in 4.2BSD.

MirBSD #10-current            December 11, 1993                              1

Generated on 2022-12-24 01:00:14 by $MirOS: src/scripts/roff2htm,v 1.113 2022/12/21 23:14:31 tg Exp $ — This product includes material provided by mirabilos.

These manual pages and other documentation are copyrighted by their respective writers; their sources are available at the project’s CVSweb, AnonCVS and other mirrors. The rest is Copyright © 2002–2022 MirBSD.

This manual page’s HTML representation is supposed to be valid XHTML/1.1; if not, please send a bug report — diffs preferred.

Kontakt / Impressum & Datenschutzerklärung