MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Standard C Library Functions                            lockf(3C)



NAME
     lockf - record locking on files

SYNOPSIS
     #include 

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


DESCRIPTION
     The lockf() function allows sections of a file to be locked;
     advisory  or  mandatory  write  locks depending  on the mode
     bits of the file (see chmod(2)). Calls to lockf() from other
     threads  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(2)  for  more
     information about record locking.


     The fildes argument is an open  file  descriptor.  The  file
     descriptor  must have OWRONLY or ORDWR permission in order
     to establish locks with this function call.


     The function argument is a control value that specifies  the
     action  to be taken. The permissible values for function are
     defined in  as follows:

       #define   FULOCK   0   /* unlock previously locked section */
       #define   FLOCK    1   /* lock section for exclusive use */
       #define   FTLOCK   2   /* test & lock section for exclusive use */
       #define   FTEST    3   /* test section for other locks */



     All other values of function are reserved for future  exten-
     sions and will result in an error if not implemented.


     FTEST is used to detect if a lock  by  another  process  is
     present  on  the  specified section. FLOCK and FTLOCK both
     lock a section of  a  file  if  the  section  is  available.
     FULOCK removes locks from a section of the file.


     The size argument is the number of contiguous  bytes  to  be
     locked  or  unlocked.  The resource to be locked or unlocked
     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 zero, the section from the current offset through



SunOS 5.11          Last change: 10 Apr 2002                    1






Standard C Library Functions                            lockf(3C)



     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 FLOCK or FTLOCK may, in whole  or
     in part, contain or be contained by a previously locked sec-
     tion for the same process.  Locked sections will be unlocked
     starting at the point of the offset through size bytes or to
     the end of file if size is (offt) 0.  When  this  situation
     occurs,  or  if  this situation occurs in adjacent sections,
     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.


     FLOCK and FTLOCK requests differ only by the action  taken
     if  the resource is not available. FLOCK blocks the calling
     thread until the resource is available. FTLOCK  causes  the
     function to return -1 and set errno to EAGAIN if the section
     is already locked by another process.


     File locks are released on first close by the  locking  pro-
     cess of any file descriptor for the file.


     FULOCK requests may, in whole or in part,  release  one  or
     more  locked  sections  controlled by the process. When sec-
     tions 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 errno is set to
     EDEADLK and the requested section is not released.


     An FULOCK request in which size is non-zero and the  offset
     of  the  last  byte  of the requested section is the maximum
     value for an object of type offt, when the process  has  an
     existing lock in which size is 0 and which includes the last
     byte of the requested section, will be treated as a  request
     to  unlock  from  the  start of the requested section with a
     size equal to 0. Otherwise, an FULOCK request will  attempt
     to unlock only the requested section.


     A potential for deadlock occurs if the threads of a  process
     controlling  a locked resource is put to sleep by requesting
     another process's locked resource. Thus calls to lockf()  or
     fcntl(2)  scan  for a deadlock prior to sleeping on a locked



SunOS 5.11          Last change: 10 Apr 2002                    2






Standard C Library Functions                            lockf(3C)



     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(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.

ERORS
     The lockf() function will fail if:

     EBADF               The fildes argument is not a valid  open
                         file  descriptor;  or function is FLOCK
                         or FTLOCK and fildes  is  not  a  valid
                         file descriptor open for writing.


     EACES or EAGAIN    The  function  argument  is  FTLOCK  or
                         FTEST and the section is already locked
                         by another process.


     EDEADLK             The function argument is  FLOCK  and  a
                         deadlock is detected.


     EINTR               A signal was caught during execution  of
                         the function.


     ECOM               The  fildes  argument  is  on  a  remote
                         machine  and the link to that machine is
                         no longer active.


     EINVAL              The function  argument  is  not  one  of
                         FLOCK,  FTLOCK, FTEST, or FULOCK; or
                         size plus the  current  file  offset  is
                         less than 0.


     EOVERFLOW           The offset of the first, or if  size  is
                         not   0  then  the  last,  byte  in  the
                         requested section cannot be  represented
                         correctly in an object of type offt.






SunOS 5.11          Last change: 10 Apr 2002                    3






Standard C Library Functions                            lockf(3C)



     The lockf() function may fail if:

     EAGAIN                  The function argument is  FLOCK  or
                             FTLOCK  and the file is mapped with
                             mmap(2).


     EDEADLK or ENOLCK       The  function  argument  is  FLOCK,
                             FTLOCK,  or FULOCK and the request
                             would cause the number of  locks  to
                             exceed a system-imposed limit.


     EOPNOTSUP or EINVAL    The locking of  files  of  the  type
                             indicated  by the fildes argument is
                             not supported.


USAGE
     Record-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.


     The lockf() function has a transitional interface for 64-bit
     file offsets.  See lf64(5).

ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:
















SunOS 5.11          Last change: 10 Apr 2002                    4






Standard C Library Functions                            lockf(3C)



     
           ATRIBUTE TYPE               ATRIBUTE 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(5), lf64(5),
     standards(5)










































SunOS 5.11          Last change: 10 Apr 2002                    5



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™