FLOCK(3C) Standard C Library Functions FLOCK(3C)
NAME
flock - OFD(open file description)-style file locking
SYNOPSIS
#include <sys/file.h>
int flock(
int fildes,
int operation);
DESCRIPTION
The
flock() function allows advisory locks to be applied to and
removed from a file. Calls to
flock() from callers that attempt to
lock the locked file section via a different open file handle will
either return an error value or be put to sleep until the resource
becomes unlocked. See
fcntl(2) for more information about record
locking. Locks created or removed via this function will apply to the
entire file, including any future growth in the file's length.
The
fildes argument is an open file descriptor. A lock can be
established without regard for the mode with which the file was
opened.
The
operation argument is a control value that specifies the action
to be taken. The permissible values for
operation are defined in
<
sys/file.h> as follows:
#define LOCK_SH 1 /* shared file lock */
#define LOCK_EX 2 /* exclusive file lock */
#define LOCK_NB 4 /* do not block when attempting to create lock */
#define LOCK_UN 8 /* remove existing file lock */
To create a lock, either
LOCK_SH or
LOCK_EX should be specified,
optionally bitwise-ored with
LOCK_NB. To remove a lock,
LOCK_UN should be specified. All other values of
operation are reserved for
future extensions and will result in an error if not implemented.
This function creates, upgrades, downgrades, or removes either shared
or exclusive OFD-style locks. Locks created by this function are
owned by open files, not file descriptors. That is, file descriptors
duplicated through
dup(2),
fork(2), or
fcntl(2) do not result in
multiple instances of a lock, but rather multiple references to the
same lock. If a process holding a lock on a file forks and the child
explicitly unlocks the file, the parent will lose its lock. See
fcntl(2) for more information about file locking and the interaction
between locks created by this function and those created by other
mechanisms. These locks are currently not supported over remote file
systems (e.g.
nfs(5)) which use the Network Lock Manager.
Sleeping on a resource is interrupted with any signal. The
alarm(2) function may be used to provide a timeout facility in applications
that require this facility.
RETURN VALUES
Upon successful completion,
0 is returned. Otherwise,
-1 is returned
and
errno is set to indicate the error.
ERRORS
The
flock() function will fail if:
EBADF The
fildes argument is not a valid open file
descriptor; or
operation contains
LOCK_SH and
filedes is not open for reading; or
operation contains
LOCK_EX and
filedes is not open for
writing.
EWOULDBLOCK The
operation argument contains
LOCK_NB and a
conflicting lock exists.
EINTR A signal was caught during execution of the
function.
EINVAL The
operation argument does not contain one of
LOCK_SH,
LOCK_EX, or
LOCK_UN; or the
operation argument contains
LOCK_UN and
LOCK_NB; or the
operation argument contains any bits other than
those set by
LOCK_SH,
LOCK_EX,
LOCK_NB, and
LOCK_UN.
The
flock() function may fail if:
EAGAIN The
operation argument contains
LOCK_SH or
LOCK_EX and the file is mapped with
mmap(2).
ENOLCK The number of locked file regions in the system
would exceed a system-imposed limit.
EOPNOTSUPP The locking of files of the type indicated by
the
fildes argument is not supported.
USAGE
File-locking should not be used in combination with the
fopen(3C),
fread(3C),
fwrite(3C) and other
stdio functions. Instead, the more
primitive, non-buffered functions (such as
open(2)) should be used.
Unexpected results may occur in processes that do buffering in the
user address space. The process may later read/write data which
is/was locked. The
stdio functions are the most common source of
unexpected buffering.
The
alarm(2) function may be used to provide a timeout facility in
applications requiring it.
Locks created by this facility conflict with those created by the
lockf(3C) and
fcntl(2) facilities. This facility creates and removed
OFD-style locks; see
fcntl(2) for information about the interaction
between OFD-style and POSIX-style file locks.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Standard |
+--------------------+-----------------+
|MT-Level | MT-Safe |
+--------------------+-----------------+
SEE ALSO
Intro(2),
alarm(2),
chmod(2),
close(2),
creat(2),
fcntl(2),
mmap(2),
open(2),
read(2),
write(2),
attributes(7),
standards(7) February 16, 2015 FLOCK(3C)