Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ flock(2) — bsd — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2)

close(2)

dup(2)

execve(2)

fork(2)



FLOCK(2-BSD)        RISC/os Reference Manual         FLOCK(2-BSD)



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

SYNOPSIS
     #include <sys/file.h>

     #define   LOCKSH   1    /* shared lock */
     #define   LOCKEX   2    /* exclusive lock */
     #define   LOCKNB   4    /* don't block when locking */
     #define   LOCKUN   8    /* unlock */

     flock(fd, operation)
     int fd, operation;

DESCRIPTION
     flock applies or removes an advisory lock on the file asso-
     ciated with the file descriptor fd.  A lock is applied by
     specifying an operation parameter that is the inclusive OR
     of LOCK_SH or LOCK_EX and, possibly, LOCK_NB.  To unlock an
     existing lock operation should be LOCK_UN.

     Advisory locks allow cooperating processes to perform con-
     sistent operations on files, but do not guarantee con-
     sistency (i.e., processes may still access files without
     using advisory locks possibly resulting in inconsistencies).

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

     A shared lock may be upgraded to an exclusive lock, and vice
     versa, simply 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 nor-
     mally causes the caller to be blocked until the lock may be
     acquired.  If LOCK_NB is included in operation, then this
     will not happen; instead the call will fail and the error
     EWOULDBLOCK will be returned.

NOTES
     Locks are on files, not file descriptors.  That is, file
     descriptors duplicated 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.




                        Printed 11/19/92                   Page 1





FLOCK(2-BSD)        RISC/os Reference Manual         FLOCK(2-BSD)



     Processes blocked awaiting a lock may be awakened by sig-
     nals.

RETURN VALUE
     Zero is returned if the operation was successful; on an
     error a -1 is returned and an error code is left in the glo-
     bal location errno.

ERRORS
     The flock call fails if:

     [EWOULDBLOCK]       The file is locked and the LOCK_NB
                         option was specified.

     [EBADF]             The argument fd is an invalid descrip-
                         tor.

     [EINVAL]            The argument fd refers to an object
                         other than a file.

     [EDEADLK]           The file is locked and the LOCK_NB
                         option was not specified, and putting
                         the calling-process to sleep, waiting
                         for that lock to become free, would
                         cause a deadlock.

CAVEAT
     flock is implemented separately from the fcntl(2) mechanism
     so any file locks obtained through the fcntl(2) and lockf(3)
     mechanisms do not interact with those acquired via flock.

SEE ALSO
     open(2), close(2), dup(2), execve(2), fork(2)






















 Page 2                 Printed 11/19/92



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026