FCNTL(2)                        System Calls                        FCNTL(2)
NAME
       fcntl - file control
SYNOPSIS
       #include <sys/types.h>
       #include <unistd.h>
       #include <fcntl.h>       
int fcntl(
int fildes, 
int cmd, 
/* arg */ ...);
DESCRIPTION
       The 
fcntl() function provides for control over open files. The 
fildes       argument is an open file descriptor.
       The 
fcntl() function can take a third argument, 
arg, whose data type,
       value, and use depend upon the value of 
cmd. The 
cmd argument
       specifies the operation to be performed by 
fcntl().
       The values for 
cmd are defined in <
fcntl.h> and include:       
F_DUPFD                      Return a new file descriptor which is the lowest
                      numbered available (that is, not already open) file
                      descriptor greater than or equal to the third
                      argument, 
arg, taken as an integer of type 
int. The
                      new file descriptor refers to the same open file
                      description as the original file descriptor, and
                      shares any locks. The 
FD_CLOEXEC or 
FD_CLOFORK flags
                      associated with the new file descriptor is cleared to
                      keep the file open across calls to one of the 
exec(2)                      or 
fork(2) functions respectively.       
F_DUP2FD                      Similar to 
F_DUPFD, but always returns 
arg. 
F_DUP2FD                      closes 
arg if it is open and not equal to 
fildes.                      F_DUP2FD is equivalent to 
dup2(
fildes, 
arg). The                      
FD_CLOEXEC and 
FD_CLOFORK flags are cleared on the new
                      descriptor, regardless of how they were set on the
                      original descriptor.       
F_DUP3FD                      Similar to 
F_DUP2FD; however, an additional argument
                      is used to set the resulting file descriptor flags,
                      rather than simply clearing them. The file descriptor
                      flags may be the bitwise-include-OR of 
FD_CLOEXEC and                      
FD_CLOFORK. This fourth argument is taken as type 
int.
                      Specifying an invalid flag in the fourth argument will
                      cause the function to fail and it will return 
EINVAL.       
F_DUPFD_CLOEXEC                      Similar to 
F_DUPFD except that the returned file
                      descriptor's flags are set explicitly to 
FD_CLOEXEC,
                      regardless of what the original file descriptor's
                      flags were.       
F_DUPFD_CLOFORK                      Similar to 
F_DUPFD except that the returned file
                      descriptor's flags are set explicitly to 
FD_CLOFORK,
                      regardless of what the original file descriptor's
                      flags were.       
F_DUP2FD_CLOEXEC                      Similar to 
F_DUP2FD with two exceptions. The                      
FD_CLOEXEC flag is explicitly set on the returned file
                      descriptor.  If 
fildes equals 
arg, the call will fail
                      setting 
errno to 
EINVAL.       
F_DUP2FD_CLOFORK                      Similar to 
F_DUP2FD with two exceptions. The                      
FD_CLOFORK flag is explicitly set on the returned file
                      descriptor.  If 
fildes equals 
arg, the call will fail
                      setting 
errno to 
EINVAL.       
F_FREESP                      Free storage space associated with a section of the
                      ordinary file 
fildes.  The section is specified by a
                      variable of data type 
struct flock pointed to by 
arg.
                      The data type 
struct flock is defined in the <
fcntl.h>
                      header (see 
fcntl.h(3HEAD)) and is described below.
                      Note that all file systems might not support all
                      possible variations of 
F_FREESP arguments. In
                      particular, many file systems allow space to be freed
                      only at the end of a file.       
F_FREESP64                      Equivalent to 
F_FREESP, but takes a 
struct flock64                      argument rather than a 
struct flock argument.       
F_ALLOCSP                      Allocate space for a section of the ordinary file                      
fildes. The section is specified by a variable of data
                      type 
struct flock pointed to by 
arg. The data type                      
struct flock is defined in the <
fcntl.h> header (see                      
fcntl.h(3HEAD) and is described below.       
F_ALLOCSP64                      Equivalent to 
F_ALLOCSP, but takes a 
struct flock64                      argument rather than a 
struct flock argument.       
F_GETFD                      Get the file descriptor flags defined in <
fcntl.h>
                      that are associated with the file descriptor 
fildes.
                      File descriptor flags are associated with a single
                      file descriptor and do not affect other file
                      descriptors that refer to the same file.       
F_GETFL                      Get the file status flags and file access modes,
                      defined in <
fcntl.h>, for the file descriptor
                      specified by 
fildes. The file access modes can be
                      extracted from the return value using the mask                      
O_ACCMODE, which is defined in <
fcntl.h>. File status
                      flags and file access modes do not affect other file
                      descriptors that refer to the same file with different
                      open file descriptions.       
F_GETOWN                      If 
fildes refers to a socket, get the process or
                      process group 
ID specified to receive 
SIGURG signals
                      when out-of-band data is available.  Positive values
                      indicate a process ID; negative values, other than -1,
                      indicate a process group ID. If 
fildes does not refer
                      to a socket, the results are unspecified.       
F_GETXFL                      Get the file status flags, file access modes, and file
                      creation and assignment flags, defined in <
fcntl.h>,
                      for the file descriptor specified by 
fildes. The file
                      access modes can be extracted from the return value
                      using the mask 
O_ACCMODE, which is defined in
                      <
fcntl.h>. File status flags, file access modes, and
                      file creation and assignment flags do not affect other
                      file descriptors that refer to the same file with
                      different open file descriptions.       
F_SETFD                      Set the file descriptor flags defined in <
fcntl.h>,
                      that are associated with 
fildes, to the third
                      argument, 
arg, taken as type 
int.  There are two flags
                      that control the behavior of the file descriptor on
                      subsequent process activity. The 
FD_CLOEXEC flag, if
                      set, will cause the file descriptor to be closed upon
                      successful execution of one of the 
exec(2) functions.
                      The 
FD_CLOFORK flag, if set, will cause the file
                      descriptor to be closed upon successful execution of
                      one of the 
fork(2) functions.       
F_SETFL                      Set the file status flags, defined in <
fcntl.h>, for
                      the file descriptor specified by 
fildes from the
                      corresponding bits in the 
arg argument, taken as type                      
int. Bits corresponding to the file access mode and
                      file creation and assignment flags that are set in 
arg                      are ignored.  If any bits in 
arg other than those
                      mentioned here are changed by the application, the
                      result is unspecified.       
F_SETOWN                      If 
fildes refers to a socket, set the process or
                      process group 
ID specified to receive 
SIGURG signals
                      when out-of-band data is available, using the value of
                      the third argument, 
arg, taken as type 
int.  Positive
                      values indicate a process ID; negative values, other
                      than -1, indicate a process group ID. If 
fildes does
                      not refer to a socket, the results are unspecified.
       The following commands are available for POSIX advisory or mandatory
       record locking. POSIX record locking is supported for regular files,
       and may be supported for other files. See the FILE LOCKING section of
       this manual page for information about the types of file locks
       available and their interaction.       
F_GETLK                     Get the first lock which blocks the POSIX lock
                     description pointed to by the third argument, 
arg,
                     taken as a pointer to type 
struct flock, defined in
                     <
fcntl.h>. The information retrieved overwrites the
                     information passed to 
fcntl() in the structure 
flock.
                     If no lock is found that would prevent this lock from
                     being created, then the structure will be left
                     unchanged except for the lock type which will be set to                     
F_UNLCK.  If multiple locks exist that would prevent
                     this lock from being created, which one is returned is
                     unspecified. If the blocking lock is an OFD-style lock,                     
-1 will be returned for the lock's pid value.       
F_GETLK64                     Equivalent to 
F_GETLK, but takes a 
struct flock64                     argument rather than a 
struct flock argument.  See                     
lf64(7).       
F_SETLK                     Set or clear a POSIX record lock according to the lock
                     description pointed to by the third argument, 
arg,
                     taken as a pointer to type 
struct flock, defined in
                     <
fcntl.h>. 
F_SETLK is used to establish shared (or
                     read) locks (
F_RDLCK) or exclusive (or write) locks
                     (
F_WRLCK), as well as to remove either type of lock
                     (
F_UNLCK). 
F_RDLCK, 
F_WRLCK and 
F_UNLCK are defined in
                     <
fcntl.h>. If a shared or exclusive lock cannot be set,                     
fcntl() will return immediately with a return value of                     
-1.       
F_SETLK64                     Equivalent to 
F_SETLK, but takes a 
struct flock64                     argument rather than a 
struct flock argument. See                     
lf64(7).       
F_SETLKW                     This command is the same as 
F_SETLK except that if a
                     shared or exclusive lock is blocked by other locks, the
                     process will wait until the request can be satisfied.
                     If a signal that is to be caught is received while                     
fcntl() is waiting for a region, 
fcntl() will be
                     interrupted. Upon return from the process' signal
                     handler, 
fcntl() will return 
-1 with 
errno set to                     
EINTR, and the lock operation will not be done.       
F_SETLKW64                     Equivalent to 
F_SETLKW, but takes a 
struct flock64                     argument rather than a 
struct flock argument. See                     
lf64(7).
       The following commands are available for OFD (open file description)
       advisory record locking. OFD record locking is supported for regular
       files, and may be supported for other files. See the FILE LOCKING
       section of this manual page for information about the types of file
       locks available and their interaction.  OFD-style record locks are
       currently limited to spanning the entire file and these locks are
       currently not supported over remote file systems (e.g.  
nfs(5)) which
       use the Network Lock Manager.       
F_OFD_GETLK                     Get the first lock which blocks the OFD lock
                     description pointed to by the third argument, 
arg,
                     taken as a pointer to type 
struct flock, defined in
                     <
fcntl.h>. The information retrieved overwrites the
                     information passed to 
fcntl() in the structure 
flock.
                     If no lock is found that would prevent this lock from
                     being created, then the structure will be left
                     unchanged except for the lock type which will be set to                     
F_UNLCK.  If multiple locks exist that would prevent
                     this lock from being created, which one is returned is
                     unspecified. If the blocking lock is an OFD-style lock,                     
-1 will be returned for the lock's pid value.       
F_OFD_GETLK64                     Equivalent to 
F_OFD_GETLK, but takes a 
struct flock64                     argument rather than a 
struct flock argument. See                     
lf64(7). This command exists solely to allow the use of
                     OFD locks with the transitional 64-bit file interfaces.       
F_OFD_SETLK                     Set or clear a OFD record lock according to the lock
                     description pointed to by the third argument, 
arg,
                     taken as a pointer to type 
struct flock, defined in
                     <
fcntl.h>. 
F_OFD_SETLK is used to establish shared (or
                     read) locks (
F_RDLCK) or exclusive (or write) locks
                     (
F_WRLCK), as well as to remove either type of lock
                     (
F_UNLCK).  
F_RDLCK, 
F_WRLCK and 
F_UNLCK are defined in
                     <
fcntl.h>.  If a shared or exclusive lock cannot be
                     set, 
fcntl() will return immediately with a return
                     value of 
-1.       
F_OFD_SETLK64                     Equivalent to 
F_OFD_SETLK, but takes a 
struct flock64                     argument rather than a 
struct flock argument. See                     
lf64(7). This command exists solely to allow the use of
                     OFD locks with the transitional 64-bit file interfaces.       
F_OFD_SETLKW                     This command is the same as 
F_OFD_SETLK except that if
                     a shared or exclusive lock is blocked by other locks,
                     the process will wait until the request can be
                     satisfied. If a signal that is to be caught is received
                     while 
fcntl() is waiting for a region, 
fcntl() will be
                     interrupted. Upon return from the process' signal
                     handler, 
fcntl() will return 
-1 with 
errno set to                     
EINTR, and the lock operation will not be done.       
F_OFD_SETLKW64                     Equivalent to 
F_OFD_SETLKW, but takes a 
struct flock64                     argument rather than a 
struct flock argument. See                     
lf64(7).  This command exists solely to allow the use
                     of OFD locks with the transitional 64-bit file
                     interfaces.
       The following values for 
cmd are used for file share reservations. A
       share reservation is placed on an entire file to allow cooperating
       processes to control access to the file.  See the SHARE RESERVATIONS
       section of this manual page below for additional information.       
F_SHARE                    Sets a share reservation on a file with the specified
                    access mode and designates which types of access to
                    deny.       
F_UNSHARE                    Remove an existing share reservation.
FILE LOCKING
       Two types of file locks are supported: POSIX-style and OFD-style.
       OFD-style locks are associated with the open file description (not
       descriptor) instead of with a process. Either type is advisory by
       default, but POSIX-style locks can be mandatory if, and only if,
       mandatory locking has been enabled on the file being locked.  Each
       type of lock may be created through two different interfaces. POSIX-
       style locks are created via the 
F_SETLK, 
F_SETLK64, 
F_SETLKW, or       
F_SETLKW64 commands to this system call or by use of the 
lockf(3C)       routine. There is no difference between locks created via one
       mechanism or the other. Likewise, OFD-style locks are created via the       
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or 
F_OFD_SETLKW64 commands
       to this system call or by use of the Linux/BSD-compatible 
flock(3C)       routine. Note that this system call supports the creation of range-
       specified OFD-style file locks, while 
flock(3C) does not. However,
       the current implementation of OFD-style locking is limited to locking
       the entire file. This limitation might be removed in the future.
       The essential distinction between POSIX-style locks and OFD-style
       locks lie in how ownership of a lock is scoped. POSIX locks are
       scoped to a process. All POSIX locks associated with a file for a
       given process are removed when any file descriptor for that file is
       closed by that process or the process holding that file descriptor
       terminates. POSIX-style locks are not inherited by a child process
       created using 
fork(2). An OFD-style lock is scoped to the file
       description for a file, not the process or open file descriptor. Thus
       all file descriptors referring to the same description (i.e. those
       created via the 
F_DUPFD, 
F_DUP2FD, 
F_DUP3FD, 
F_DUPFD_CLOEXEC,       
F_DUP2FD_CLOEXEC, 
F_DUPFD_CLOFORK, or 
F_DUP2FD_CLOFORK commands to
       the 
fcntl(2) system call, or those created via the 
dup(2) system
       call, or those inherited by a child process created via 
fork(2))
       reference the same lock, but a file descriptor obtained via a
       separate 
open(2) call on the same file will reference a different
       lock.  A lock is removed only on the last 
close(2) of the
       description, or when the lock is explicitly unlocked.
       Locks of both styles are compatible. A file that has been locked with
       one style of lock will be regarded as locked when creation of a lock
       of either style is attempted, and information about the lock will be
       provided via any of the 
F_GETLK, 
F_GETLK64, 
F_OFD_GETLK, or       
F_OFD_GETLK64 commands to this system call if that lock would
       conflict with an attempt to create the specified lock regardless of
       whether the specified lock is of the same style as the conflicting
       extant lock.  Because ownership of OFD-style locks is scoped to the
       open description rather than the calling process, the 
l_pid field of
       a lock descriptor for any such lock will always be set to 
-1.
       When a shared lock is set on a segment of a file, other callers
       (regardless of whether in the same or different process and of
       whether referenced via the same open file) will be able to set shared
       locks on that segment or a portion of it. A POSIX-style shared lock
       prevents any other process from setting an exclusive lock on any
       portion of the protected area. A OFD-style shared lock prevents any
       caller (even callers in the same process) from setting an exclusive
       lock on any portion of the protected area, unless the caller makes
       the request against a file descriptor referencing the same open file
       against which the shared lock was created, in which case the lock
       will be downgraded to a shared lock with respect to the specified
       region. A request for a shared lock of either style will fail if the
       file descriptor was not opened with read access.
       A POSIX-style exclusive lock will prevent any other process from
       setting a shared lock or an exclusive lock (of either style) on any
       portion of the protected area. A request for an exclusive lock will
       fail if the file descriptor was not opened with write access.
       The 
flock structure contains at least the following elements:
         short   l_type;       /* lock operation type */
         short   l_whence;     /* lock base indicator */
         off_t   l_start;      /* starting offset from base */
         off_t   l_len;        /* lock length; l_len == 0 means
                                  until end of file */
         int     l_sysid;      /* system ID running process holding lock */
         pid_t   l_pid;        /* process ID of process holding lock */
       The value of 
l_whence is 
SEEK_SET, 
SEEK_CUR, or 
SEEK_END, to indicate
       that the relative offset 
l_start bytes will be measured from the
       start of the file, current position or end of the file, respectively.
       The value of 
l_len is the number of consecutive bytes to be locked.
       The value of 
l_len may be negative (where the definition of 
off_t       permits negative values of 
l_len). After a successful 
F_GETLK,       
F_GETLK64, 
F_OFD_GETLK, or 
F_OFD_GETLK64 request, that is, one in
       which a lock was found, the value of 
l_whence will be 
SEEK_SET.
       The 
l_pid and 
l_sysid fields are used only with 
F_GETLK or 
F_GETLK64       to return the process 
ID of the process holding a POSIX-style
       blocking lock and to indicate which system is running that process,
       or 
-1 if it is an OFD-style lock. These fields must both be
       initialized to 0 prior to issuing a OFD-style locking command
       (
F_OFD_GETLK or 
F_OFD_GETLK64).
       If 
l_len is positive, the area affected starts at 
l_start and ends at       
l_start + 
l_len - 1. If 
l_len is negative, the area affected starts
       at 
l_start + 
l_len and ends at 
l_start - 1. Locks may start and
       extend beyond the current end of a file, but must not be negative
       relative to the beginning of the file. A lock will be set to extend
       to the largest possible value of the file offset for that file by
       setting 
l_len to 0. If such a lock also has 
l_start set to 0 and       
l_whence is set to 
SEEK_SET, the whole file will be locked.
       If a lock exists for which 
l_len is 0 and which includes the last
       byte of the requested segment, and an unlock (
F_UNLCK) request is
       made in which 
l_len is non-zero and the offset of the last byte of
       the requested segment is the maximum value for an object of type       
off_t, then the 
F_UNLCK request will be treated as a request to
       unlock from the start of the requested segment with an 
l_len equal to
       0. Otherwise, the request will attempt to unlock only the requested
       segment.
       There will be at most one type of lock set for each byte in the file.
       Before a successful return from an 
F_SETLK, 
F_SETLK64, 
F_SETLKW, or       
F_SETLKW64 request when the calling process has previously existing
       POSIX-style locks on bytes in the region specified by the request,
       the previous POSIX-style lock type for each byte in the specified
       region will be replaced by the new lock type. As specified above
       under the descriptions of shared locks and exclusive locks, an       
F_SETLK, 
F_SETLK64, 
F_SETLKW, or 
F_SETLKW64 request will
       (respectively) fail or block when locks exist on bytes in the
       specified region and the type of any of those locks conflicts with
       the type specified in the request.
       Similarly, before a successful return from an 
F_OFD_SETLK,       
F_OFD_SETLK64, 
F_OFD_SETLKW, or 
F_OFD_SETLKW64 request when
       previously-created OFD-style locks associated with the open file
       apply to bytes in the region specified by the request, the previous
       OFD-style lock type for each byte in the specified region will be
       replaced by the new lock type.  As specified above under the
       descriptions of shared locks and exclusive locks, an 
F_OFD_SETLK,       
F_OFD_SETLK64, 
F_OFD_SETLKW, or 
F_OFD_SETLKW64 request will
       (respectively) fail or block when locks exist on bytes in the
       specified region and the type of any of those locks conflicts with
       the type specified in the request.
       A potential for deadlock occurs if a process controlling a locked
       region is put to sleep by attempting to lock another process' locked
       region. If the system detects that sleeping until a locked region is
       unlocked would cause a deadlock, 
fcntl() will fail with an 
EDEADLK       error. This deadlock detection and error value apply only to POSIX-
       style locks.  No deadlock detection is performed when attempting to
       set an OFD-style lock.
SHARE RESERVATIONS
       File share reservations are an advisory form of access control among
       cooperating processes, on both local and remote machines. They are
       most often used by 
DOS or Windows emulators and 
DOS based NFS       clients.  However, native UNIX versions of 
DOS or Windows
       applications may also choose to use this form of access control.
       A share reservation is described by an 
fshare structure defined in
       <
sys/fcntl.h>, which is included in <
fcntl.h> as follows:
         typedef struct fshare {
                 short   f_access;
                 short   f_deny;
                 int     f_id;
         } fshare_t;
       A share reservation specifies the type of access, 
f_access, to be
       requested on the open file descriptor. If access is granted, it
       further specifies what type of access to deny other processes,       
f_deny. A single process on the same file may hold multiple non-
       conflicting  reservations by specifying an identifier, 
f_id, unique
       to the process, with each request.
       An 
F_UNSHARE request releases the reservation with the specified       
f_id. The 
f_access and 
f_deny fields are ignored.
       Valid 
f_access values are:       
F_RDACC                  Set a file share reservation for read-only access.       
F_WRACC                  Set a file share reservation for write-only access.       
F_RWACC                  Set a file share reservation for read and write access.
       Valid 
f_deny values are:       
F_COMPAT                   Set a file share reservation to compatibility mode.       
F_RDDNY                   Set a file share reservation to deny read access to other
                   processes.       
F_WRDNY                   Set a file share reservation to deny write access to
                   other processes.       
F_RWDNY                   Set a file share reservation to deny read and write
                   access to other processes.       
F_NODNY                   Do not deny read or write access to any other process.
RETURN VALUES
       Upon successful completion, the value returned depends on 
cmd as
       follows:       
F_DUPFD, 
F_DUP2FD, 
F_DUP3FD                     A new file descriptor.       
F_DUPFD_CLOEXEC, 
F_DUPFD_CLOFORK                     A new file descriptor.       
F_DUP2FD_CLOEXEC, 
F_DUP2FD_CLOFORK                     A new file descriptor.       
F_FREESP                     Value of 
0.       
F_GETFD                     Value of flags defined in 
<fcntl.h>. The return value
                     will not be negative.       
F_GETFL                     Value of file status flags and access modes. The return
                     value will not be negative.       
F_GETLK                     Value other than 
-1.       
F_GETLK64                     Value other than 
-1.       
F_GETOWN                     Value of the socket owner process or process group;
                     this will not be 
-1.       
F_GETXFL                     Value of file status flags, access modes, and creation
                     and assignment flags.  The return value will not be
                     negative.       
F_OFD_GETLK                     Value other then 
-1.       
F_OFD_GETLK64                     Value other then 
-1.       
F_OFD_SETLK                     Value other then 
-1.       
F_OFD_SETLK64                     Value other then 
-1.       
F_OFD_SETLKW                     Value other then 
-1.       
F_OFD_SETLKW64                     Value other then 
-1.       
F_SETFD                     Value other than 
-1.       
F_SETFL                     Value other than 
-1.       
F_SETLK                     Value other than 
-1.       
F_SETLK64                     Value other than 
-1.       
F_SETLKW                     Value other than 
-1.       
F_SETLKW64                     Value other than 
-1.       
F_SETOWN                     Value other than 
-1.       
F_SHARE                     Value other than 
-1.       
F_UNSHARE                     Value other than 
-1.
       Otherwise, 
-1 is returned and 
errno is set to indicate the error.
ERRORS
       The 
fcntl() function will fail if:       
EAGAIN                    The 
cmd argument is 
F_SETLK, 
F_SETLK64, 
F_OFD_SETLK, or                    
F_OFD_SETLK64, the type of lock 
(l_type) is a shared
                    (
F_RDLCK) or exclusive (
F_WRLCK) lock, and the segment
                    of a file to be locked is already exclusive-locked by
                    another process or open file; or the type is an
                    exclusive lock and some portion of the segment of a file
                    to be locked is already shared-locked or exclusive-
                    locked by another process or open file.
                    The 
cmd argument is 
F_FREESP, the file exists, mandatory
                    file/record locking is set, and there are outstanding
                    record locks on the file; or the 
cmd argument is                    
F_SETLK, 
F_SETLK64, 
F_SETLKW, or 
F_SETLKW64, mandatory
                    file/record locking is set, and the file is currently
                    being mapped to virtual memory using 
mmap(2).
                    The 
cmd argument is 
F_SHARE and 
f_access conflicts with
                    an existing 
f_deny share reservation.       
EBADF                    The 
fildes argument is not a valid open file descriptor;
                    or the 
cmd argument is 
F_SETLK, 
F_SETLK64, 
F_SETLKW,                    
F_SETLKW64, 
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or                    
F_OFD_SETLKW64, the type of lock, 
l_type, is a shared
                    lock (
F_RDLCK), and 
fildes is not a valid file
                    descriptor open for reading; or the type of lock 
l_type                    is an exclusive lock (
F_WRLCK) and 
fildes is not a valid
                    file descriptor open for writing.
                    The 
cmd argument is 
F_FREESP and 
fildes is not a valid
                    file descriptor open for writing.
                    The 
cmd argument is 
F_DUP2FD, 
F_DUP2FD_CLOEXEC,                    
F_DUP2FD_CLOFORK, or 
F_DUP3FD and 
arg is negative or is
                    not less than the current resource limit for                    
RLIMIT_NOFILE.                    The 
cmd argument is 
F_SHARE, the 
f_access share
                    reservation is for write access, and 
fildes is not a
                    valid file descriptor open for writing.
                    The 
cmd argument is 
F_SHARE, the 
f_access share
                    reservation is for read access, and 
fildes is not a
                    valid file descriptor open for reading.       
EFAULT                    The 
cmd argument is 
F_GETLK, 
F_GETLK64, 
F_SETLK,                    
F_SETLK64, 
F_SETLKW, 
F_SETLKW64, 
F_OFD_GETLK,                    
F_OFD_GETLK64, 
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW,                    
F_OFD_SETLKW64, 
F_SHARE, 
F_UNSHARE, or 
F_FREESP and the                    
arg argument points to an illegal address.       
EINTR                    The 
cmd argument is 
F_SETLKW, 
F_SETLKW64, 
F_OFD_SETLKW,
                    or 
F_OFD_SETLKW64, and the function was interrupted by a
                    signal.       
EINVAL                    The 
cmd argument is invalid or not supported by the file
                    system; or the 
cmd argument is 
F_DUPFD and 
arg is
                    negative or greater than or equal to 
OPEN_MAX; or the                    
cmd argument is 
F_GETLK, 
F_GETLK64, 
F_SETLK, 
F_SETLK64,                    
F_SETLKW, 
F_SETLKW64, 
F_OFD_GETLK, 
F_OFD_GETLK64,                    
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or                    
F_OFD_SETLKW64, and the data pointed to by 
arg is not
                    valid; or 
fildes refers to a file that does not support
                    locking.
                    The 
cmd argument is 
F_UNSHARE and a reservation with
                    this 
f_id for this process does not exist.
                    The 
cmd argument is 
F_DUP2FD_CLOEXEC or 
F_DUP2FD_CLOFORK                    and 
fildes is equal to 
arg.
                    The 
cmd argument is 
F_DUP3FD and the fourth flags
                    argument contains unknown values.       
EIO                    An I/O error occurred while reading from or writing to
                    the file system.       
EMFILE                    The 
cmd argument is 
F_DUPFD and either 
OPEN_MAX file
                    descriptors are currently open in the calling process,
                    or no file descriptors greater than or equal to 
arg are
                    available.       
ENOLCK                    The 
cmd argument is 
F_SETLK, 
F_SETLK64, 
F_SETLKW,                    
F_SETLKW64, 
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or                    
F_OFD_SETLKW64, and satisfying the lock or unlock
                    request would result in the number of locked regions in
                    the system exceeding a system-imposed limit.       
ENOLINK                    Either the 
fildes argument is on a remote machine and
                    the link to that machine is no longer active; or the 
cmd                    argument is 
F_FREESP, the file is on a remote machine,
                    and the link to that machine is no longer active.       
EOVERFLOW                    One of the values to be returned cannot be represented
                    correctly.
                    The 
cmd argument is 
F_GETLK, 
F_SETLK, 
F_SETLKW,                    
F_OFD_GETLK, 
F_OFD_SETLK, or 
F_OFD_SETLKW, and the
                    smallest or, if 
l_len is non-zero, the largest, offset
                    of any byte in the requested segment cannot be
                    represented correctly in an object of type 
off_t.
                    The 
cmd argument is 
F_GETLK64, 
F_SETLK64, 
F_SETLKW64,                    
F_OFD_GETLK64, 
F_OFD_SETLK64, or 
F_OFD_SETLKW64, and the
                    smallest or, if 
l_len is non-zero, the largest, offset
                    of any byte in the requested segment cannot be
                    represented correctly in an object of type 
off64_t.
       The 
fcntl() function may fail if:       
EAGAIN                  The 
cmd argument is 
F_SETLK, 
F_SETLK64, 
F_SETLKW,                  
F_SETLKW64, 
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or                  
F_OFD_SETLKW64 and the file is currently being mapped to
                  virtual memory using 
mmap(2).       
EDEADLK                  The 
cmd argument is 
F_SETLKW or 
F_SETLKW64, the lock is
                  blocked by some lock from another process and putting the
                  calling process to sleep, waiting for that lock to become
                  free would cause a deadlock.
                  The 
cmd argument is 
F_FREESP, mandatory record locking is
                  enabled, 
O_NDELAY and 
O_NONBLOCK are clear and a deadlock
                  condition was detected.       
EOPNOTSUPP                  The 
cmd argument is 
F_OFD_GETLK, 
F_OFD_GETLK64,                  
F_OFD_SETLK, 
F_OFD_SETLK64, 
F_OFD_SETLKW, or                  
F_OFD_SETLKW64 and the locking of files of the type
                  indicated by the 
fildes argument is not supported.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-------------------+
       |  ATTRIBUTE TYPE    |  ATTRIBUTE VALUE  |
       +--------------------+-------------------+
       |Interface Stability | Standard          |
       +--------------------+-------------------+
       |MT-Level            | Async-Signal Safe |
       +--------------------+-------------------+
SEE ALSO
       chmod(2), 
close(2), 
creat(2), 
dup(2), 
exec(2), 
fork(2), 
mmap(2),       
open(2), 
pipe(2), 
read(2), 
sigaction(2), 
write(2), 
dup2(3C),       
flock(3C), 
lockf(3C), 
fcntl.h(3HEAD), 
attributes(7), 
lf64(7),       
standards(7), 
lockd(8)       Programming Interfaces GuideNOTES
       In the past, the variable 
errno was set to 
EACCES rather than 
EAGAIN       when a section of a file is already locked by another process.
       Therefore, portable application programs should expect and test for
       either value.
       Advisory locks allow cooperating processes to perform consistent
       operations on files, but do not guarantee exclusive access. Files can
       be accessed without advisory locks, but inconsistencies may result.
       The network share locking protocol does not support the 
f_deny value
       of 
F_COMPAT. For network file systems, if 
f_access is 
F_RDACC, 
f_deny       is mapped to 
F_RDDNY. Otherwise, it is mapped to 
F_RWDNY.
       To prevent possible file corruption, the system may reject 
mmap()       requests for advisory locked files, or it may reject advisory locking
       requests for mapped files. Applications that require a file be both
       locked and mapped should lock the entire file (
l_start and 
l_len both
       set to 0). If a file is mapped, the system may reject an unlock
       request, resulting in a lock that does not cover the entire file.
       The process ID returned for locked files on network file systems
       might not be meaningful.
       If the file server crashes and has to be rebooted, the lock manager
       (see 
lockd(8)) attempts to recover all locks that were associated
       with that server. If a lock cannot be reclaimed, the process that
       held the lock is issued a 
SIGLOST signal.
                                June 21, 2024                       FCNTL(2)