(libc.info.gz) Descriptor Flags

Info Catalog (libc.info.gz) Duplicating Descriptors (libc.info.gz) Low-Level I/O (libc.info.gz) File Status Flags
 
 13.13 File Descriptor Flags
 ===========================
 
 "File descriptor flags" are miscellaneous attributes of a file
 descriptor.  These flags are associated with particular file
 descriptors, so that if you have created duplicate file descriptors
 from a single opening of a file, each descriptor has its own set of
 flags.
 
    Currently there is just one file descriptor flag: `FD_CLOEXEC',
 which causes the descriptor to be closed if you use any of the
 `exec...' functions ( Executing a File).
 
    The symbols in this section are defined in the header file `fcntl.h'.  
 
  -- Macro: int F_GETFD
      This macro is used as the COMMAND argument to `fcntl', to specify
      that it should return the file descriptor flags associated with
      the FILEDES argument.
 
      The normal return value from `fcntl' with this command is a
      nonnegative number which can be interpreted as the bitwise OR of
      the individual flags (except that currently there is only one flag
      to use).
 
      In case of an error, `fcntl' returns -1.  The following `errno'
      error conditions are defined for this command:
 
     `EBADF'
           The FILEDES argument is invalid.
 
  -- Macro: int F_SETFD
      This macro is used as the COMMAND argument to `fcntl', to specify
      that it should set the file descriptor flags associated with the
      FILEDES argument.  This requires a third `int' argument to specify
      the new flags, so the form of the call is:
 
           fcntl (FILEDES, F_SETFD, NEW-FLAGS)
 
      The normal return value from `fcntl' with this command is an
      unspecified value other than -1, which indicates an error.  The
      flags and error conditions are the same as for the `F_GETFD'
      command.
 
    The following macro is defined for use as a file descriptor flag with
 the `fcntl' function.  The value is an integer constant usable as a bit
 mask value.
 
  -- Macro: int FD_CLOEXEC
      This flag specifies that the file descriptor should be closed when
      an `exec' function is invoked; see  Executing a File.  When
      a file descriptor is allocated (as with `open' or `dup'), this bit
      is initially cleared on the new file descriptor, meaning that
      descriptor will survive into the new program after `exec'.
 
    If you want to modify the file descriptor flags, you should get the
 current flags with `F_GETFD' and modify the value.  Don't assume that
 the flags listed here are the only ones that are implemented; your
 program may be run years from now and more flags may exist then.  For
 example, here is a function to set or clear the flag `FD_CLOEXEC'
 without altering any other flags:
 
      /* Set the `FD_CLOEXEC' flag of DESC if VALUE is nonzero,
         or clear the flag if VALUE is 0.
         Return 0 on success, or -1 on error with `errno' set. */
 
      int
      set_cloexec_flag (int desc, int value)
      {
        int oldflags = fcntl (desc, F_GETFD, 0);
        /* If reading the flags failed, return error indication now. */
        if (oldflags < 0)
          return oldflags;
        /* Set just the flag we want to set. */
        if (value != 0)
          oldflags |= FD_CLOEXEC;
        else
          oldflags &= ~FD_CLOEXEC;
        /* Store modified flag word in the descriptor. */
        return fcntl (desc, F_SETFD, oldflags);
      }
 
Info Catalog (libc.info.gz) Duplicating Descriptors (libc.info.gz) Low-Level I/O (libc.info.gz) File Status Flags
automatically generated by info2html