COHERENT manpages
This page displays the COHERENT manpage for lockf() [Lock a file or a section of a file].
List of available manpages
Index
lockf() -- General Function (libc)
Lock a file or a section of a file
#include <unistd.h>
int
lockf(fd, cmd, size)
int fd, cmd; long size;
The COHERENT library function lockf() allows a process to lock part or all
of a file. If another process calls lockf() on the same file to request a
lock that conflicts with a previous lock, the later lockf() call returns an
error or sleeps until the file is unlocked by the first process.
fd gives a file descriptor of an open file; the file must have been opened
with O_WRONLY or O_RDWR permission if lockf() is to succeed.
size specifies how many bytes should be locked or unlocked. The lock
begins at the current file position and extend forward (if size is
positive) or backwards (if it is negative). A size of zero locks or
unlocks the entire file starting from the current position.
cmd specifies the action lockf() is to take. lockf() recognizes the
following four commands, as specified in the header file <unistd.h>:
F_TEST Test whether a lock has already been set upon the specified section
of the file.
F_LOCK Lock a section of the file, if possible. If the section cannot be
locked, sleep until it becomes available for locking.
F_TLOCK Lock a section of the file, if possible. Unlike F_LOCK, F_TLOCK
does not sleep if the section cannot be locked; rather, it returns
-1 and sets errno to EAGAIN if the lock is not available.
F_ULOCK Unlock a currently existing lock.
Use lockf() with the unbuffered I/O routines (open(), write(), and so on)
rather than with standard I/O library routines (fopen(), fprintf(),
fwrite(), and so on). The buffering used by the standard I/O library may
cause unexpected behavior with file locking.
See Also
creat(),
fcntl(),
libc,
open()
Diagnostics
lockf() returns zero on success, -1 on failure. On failure, it also sets
errno to an appropriate value. Possible errors include the following:
EINVAL Invalid file descriptor.
EAGAIN Requested section is already locked.
EDEADLK A deadlock would occur if the command slept, or the system lock
table is full.
Notes
See the Lexicon entry for fcntl() for a fuller description of the COHERENT
system's method of file locking.











