Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chmod(2)

close(2)

creat(2)

fcntl(2)

open(2)

read(2)

write(2)



  lockf(3)                            CLIX                            lockf(3)



  NAME

    lockf - Provides record locking on files

  LIBRARY

    Standard C Library (libc.a)

  SYNOPSIS

    #include <unistd.h>

    int lockf(
      int fildes ,
      int function ,
      long size );

  PARAMETERS

    fildes     An integer representing a file descriptor

    function   An integer representing a control value

    size       The number of contiguous bytes to be locked

  DESCRIPTION

    The lockf() function will allow sections of a file to be locked; advisory
    or mandatory write locks depending on the mode bits of the file [see
    chmod()].  Locking calls from other processes that attempt to lock the
    locked file section will either return an error value or be put to sleep
    until the resource becomes unlocked.  All the locks for a process are
    removed when the process terminates.  [See fcntl() for more information
    about record locking.]

    The fildes is an open file descriptor.  The file descriptor must have
    O_WRONLY or O_RDWR permission in order to establish lock with this
    function call.

    The function parameter is a control value which specifies the action to be
    taken.  The permissible values for function are defined in <unistd.h>, as
    follows:

    F_ULOCK   0    /* Unlock a previously locked section */

    F_LOCK    1    /* Lock a section for exclusive use */

    F_TLOCK   2    /* Test and lock a section for exclusive use */

    F_TEST    3    /* Test section for other processes locks */




  2/94 - Intergraph Corporation                                              1






  lockf(3)                            CLIX                            lockf(3)



    All other values of function are reserved for future extensions and will
    result in an error return if not implemented.

    The F_TEXT control value is used to detect if a lock by another process is
    present on the specified section.  Both O_LOCK and O_TLOCK lock a section
    of a file if the section is available.  The F_ULOCK removes locks from a
    section of the file.

    The size parameter is the number of contiguous bytes to be locked or
    unlocked.  The resource to be locked starts at the current offset in the
    file and extends forward for a positive size and backward for a negative
    size (the preceding bytes up to but not including the current offset).  If
    size is 0, the section from the current offset through the largest file
    offset is locked (that is, from the current offset through the present or
    any future end-of-file).  An area need not be allocated to the file in
    order to be locked as such locks may exist past the end-of-file.

    The sections locked with, F_LOCK or F_TLOCK may, in whole or in
    part,contain or be contained by a previously locked section for the same
    process.  When this occurs, or if adjacent sections occur, the sections
    are combined into a single section.  If the request requires that a new
    element be added to the table of active locks and this table is already
    full, an error is returned, and the new section is not locked.

    The F_LOCK and F_TLOCK requests differ only by the action taken if the
    resource is not available.  The F_LOCK request causes the calling process
    to sleep until the resource is available.  The F_TLOCK request causes the
    function to return -1 and set errno to [EACCES] error if the section is
    already locked by another process.

    The F_ULOCK requests may, in whole or in part, release one or more locked
    sections controlled by the process.  When sections are not fully released,
    the remaining sections are still locked by the process.  Releasing the
    center section of a locked section requires an additional element in the
    table of active locks.  If this table is full, an [EDLOCK] error is
    returned and the requested section is not released.

    A potential for deadlock occurs if a process controlling a locked resource
    is put to sleep by accessing another process's locked resource.  Thus
    calls to lockf() or fcntl() scan for a deadlock prior to sleeping on a
    locked resource.  An error return is made if sleeping on the locked
    resource would cause a deadlock.

    Sleeping on a resource is interrupted with any signal.  The alarm()
    function may be used to provide a timeout facility in applications which
    require this facility.

  CAUTIONS

    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.



  2                                              Intergraph Corporation - 2/94






  lockf(3)                            CLIX                            lockf(3)



    The standard I/O package is the most common source of unexpected
    buffering.  Because in the future the variable errno will be set to EAGAN
    rather than EACCES, when a section of a file is already locked by another
    process, portable application programs should expect and test for either
    value.

  RETURN VALUES

    Upon successful completion, a value of 0 is returned.  Otherwise, a value
    of -1 is returned and errno is set to indicate the error.

  ERRORS

    The lockf() function fails if one or more of the following are true:

    [EBADF]     The fildes is not a valid open descriptor.

    [EACCES]    The cmd is F_TLOCK or F_TEST and the section is already locked
                by another process.

    [EDEADLK]   The value of cmd is F_LOCK and a deadlock would occur.  Also
                the cmd is either F_LOCK, F_TLOCK, or F_ULOCK and the number
                of entries in the lock table would exceed the number allocated
                on the system.

    [ECOMM]     The fildes is on a remote machine and the link to that machine
                is no longer active.

  RELATED INFORMATION

    Functions:  chmod(2), close(2), creat(2), fcntl(2), open(2), read(2),
    write(2)






















  2/94 - Intergraph Corporation                                              3




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