IPB
>  Man Pages > Unix > Solaris 10 11/06 > Section 2 > fcntl man page

fcntl man page

Section 2 - Solaris 10 11/06 Man Pages

Other operating system man pages available here


Advanced Search

Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!





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 flag
                     associated with the new file  descriptor  is
                     cleared  to  keep the file open across calls
                     to one of the exec(2) functions.



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



     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



SunOS 5.10          Last change: 24 Sep 2003                    1






System Calls                                             fcntl(2)



                     file.



     F_FREESP64      Equivalent to F_FREESP, 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  pro-
                     cess   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



SunOS 5.10          Last change: 24 Sep 2003                    2






System Calls                                             fcntl(2)



                     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.  If  the  FD_CLOEXEC  flag in the third
                     argument is 0, the  file  will  remain  open
                     across  the  exec() functions; otherwise the
                     file will be closed upon  successful  execu-
                     tion of one of the exec() 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  unspeci-
                     fied.



     F_SETOWN        If fildes refers to a socket, set  the  pro-
                     cess   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  advisory  record
     locking.  Record locking is supported for regular files, and
     may be supported for other files.

     F_GETLK         Get the first lock  which  blocks  the  lock
                     description  pointed  to  by the third argu-
                     ment, 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



SunOS 5.10          Last change: 24 Sep 2003                    3






System Calls                                             fcntl(2)



                     be left unchanged except for the  lock  type
                     which will be set to F_UNLCK.



     F_GETLK64       Equivalent to F_GETLK, but  takes  a  struct
                     flock64  argument rather than a struct flock
                     argument.



     F_SETLK         Set or clear a file segment  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  immedi-
                     ately with a return value of -1.



     F_SETLK64       Equivalent to F_SETLK, but  takes  a  struct
                     flock64  argument rather than a struct flock
                     argument.



     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.







SunOS 5.10          Last change: 24 Sep 2003                    4






System Calls                                             fcntl(2)



     When a shared lock is set on a  segment  of  a  file,  other
     processes  will  be able to set shared locks on that segment
     or a portion of it. A shared lock prevents any other process
     from  setting  an  exclusive lock on any portion of the pro-
     tected area. A request for a shared lock will  fail  if  the
     file descriptor was not opened with read access.

     An exclusive lock will prevent any other process  from  set-
     ting  a  shared  lock or an exclusive lock 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  ele-
     ments:

     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  or  F_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
     blocking lock and to indicate which system is  running  that
     process.

     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 possi-
     ble 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.





SunOS 5.10          Last change: 24 Sep 2003                    5






System Calls                                             fcntl(2)



     If a process has an existing lock in 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 seg-
     ment 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 locks on bytes in the region
     specified by the request, the previous 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  another  process has existing locks on bytes in
     the specified region and the type of any of those locks con-
     flicts with the type specified in the request.

     All locks associated with a file for  a  given  process  are
     removed  when  a  file descriptor for that file is closed by
     that process or the process  holding  that  file  descriptor
     terminates.  Locks  are  not  inherited  by  a child process
     created using fork(2).

     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.

     The following values for cmd are used for file share  reser-
     vations.  A share reservation is placed on an entire file to
     allow cooperating processes to control access to the file.

     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 share reservations are an advisory form of access  con-
     trol  among  cooperating processes, on both local and remote
     machines. They  are  most  often  used  by  DOS  or  Windows



SunOS 5.10          Last change: 24 Sep 2003                    6






System Calls                                             fcntl(2)



     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  compatibil-
                     ity mode.






SunOS 5.10          Last change: 24 Sep 2003                    7






System Calls                                             fcntl(2)



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



SunOS 5.10          Last change: 24 Sep 2003                    8






System Calls                                             fcntl(2)



     F_GETXFL        Value of file status  flags,  access  modes,
                     and   creation  and  assignment  flags.  The
                     return value will not be negative.



     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  or  F_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



SunOS 5.10          Last change: 24 Sep 2003                    9






System Calls                                             fcntl(2)



                     already exclusive-locked by another process;
                     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.

                     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,  manda-
                     tory  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, or F_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 writ-
                     ing.

                     The cmd argument is F_FREESP and  fildes  is
                     not  a  valid file descriptor open for writ-
                     ing.

                     The cmd argument is  F_DUP2FD,  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.







SunOS 5.10          Last change: 24 Sep 2003                   10






System Calls                                             fcntl(2)



     EFAULT          The  cmd  argument  is  F_GETLK,  F_GETLK64,
                     F_SETLK, F_SETLK64, F_SETLKW, F_SETLKW64, or
                     F_FREESP and the arg argument points  to  an
                     illegal address.

                     The cmd argument is F_SHARE or F_UNSHARE and
                     arg points to an illegal address.



     EINTR           The cmd argument is F_SETLKW  or  F_SETLKW64
                     and  the  function was interrupted by a sig-
                     nal.



     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, or F_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 reserva-
                     tion  with  this  f_id for this process does
                     not exist.



     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  descrip-
                     tors greater than or equal to arg are avail-
                     able.



     ENOLCK          The  cmd  argument  is  F_SETLK,  F_SETLK64,
                     F_SETLKW,  or  F_SETLKW64 and satisfying the
                     lock or unlock request would result  in  the
                     number  of  locked  regions  in  the  system
                     exceeding a system-imposed limit.






SunOS 5.10          Last change: 24 Sep 2003                   11






System Calls                                             fcntl(2)



     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,  or
                     F_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, or
                     F_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,  or  F_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 pro-
                     cess  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  condi-
                     tion was detected.



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




SunOS 5.10          Last change: 24 Sep 2003                   12






System Calls                                             fcntl(2)



     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Standard                    |
    |_____________________________|_____________________________|
    | MT-Level                    | Async-Signal Safe           |
    |_____________________________|_____________________________|


SEE ALSO
     lockd(1M), 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),  fcntl.h(3HEAD),  attributes(5),  stan-
     dards(5)

     Programming Interfaces Guide

NOTES
     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  con-
     sistent  operations on files, but do not guarantee exclusive
     access. Files can be accessed without  advisory  locks,  but
     inconsistencies may result. The network share locking proto-
     col does not support the f_deny value of F_COMPAT. For  net-
     work  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, result-
     ing in a lock that does not cover the entire file.

     If the file server crashes and has to be rebooted, the  lock
     manager  (see  lockd(1M)) 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.











SunOS 5.10          Last change: 24 Sep 2003                   13





Man(1) output converted with man2html and wrapped by fishsponge

This page was generated on Wed Sep 12 11:26:57 GMT 2007

Your favourite pages:

No pages logged yet.
Trying to save cookie...

Top 10 most popular pages:

CPAN man page (4333 hits)
(Suse Linux 10.1)

ssh man page (4186 hits)
(Suse Linux 10.1)

adv_cap_autoneg man page (4147 hits)
(Solaris 10 11_06)

sqlite3 man page (4070 hits)
(openSUSE 10.2)

svn man page (3249 hits)
(FreeBSD 6.2)

startproc man page (1908 hits)
(Suse Linux 10.1)

pprosetup man page (1666 hits)
(Solaris 10 11_06)

netcat man page (1613 hits)
(Suse Linux 10.1)

signal man page (1592 hits)
(Suse Linux 10.1)

ssh-socks5-proxy-connect man page (1558 hits)
(Solaris 10 11_06)

Useful Links

Go Back

Visitor Statistics


Valid XHTML 1.0 Transitional     Valid CSS!

Partners: Cambridge Plus :: PYRENEES GOLF HOLIDAYS :: Digital Electronic Design :: <Link Available>
Unix Man Pages / Linux Man Pages :: HiFi Forum :: SIP VoIP Phone & Provider Reviews :: UNIX/Linux Forum Archives

More info on advertising on Unix/Linux Forum