Print this page
14249 pseudo-terminal nomenclature should reflect POSIX
Change-Id: Ib4a3cef899ff4c71b09cb0dc6878863c5e8357bc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man2/close.2.man.txt
          +++ new/usr/src/man/man2/close.2.man.txt
   1    1  CLOSE(2)                         System Calls                         CLOSE(2)
   2    2  
   3    3  NAME
   4      -       close - close a file descriptor
        4 +     close - close a file descriptor
   5    5  
   6    6  SYNOPSIS
   7      -       #include <unistd.h>
        7 +     #include <unistd.h>
   8    8  
   9      -       int close(int fildes);
        9 +     int
       10 +     close(int fildes);
  10   11  
  11      -
  12   12  DESCRIPTION
  13      -       The close() function deallocates the file descriptor indicated by
  14      -       fildes. To deallocate means to make the file descriptor available for
  15      -       return by subsequent calls to open(2) or other functions that allocate
  16      -       file descriptors. All outstanding record locks owned by the process on
  17      -       the file associated with the file descriptor will be removed (that is,
  18      -       unlocked).
       13 +     The close() function deallocates the file descriptor indicated by fildes.
       14 +     To deallocate means to make the file descriptor available for return by
       15 +     subsequent calls to open(2) or other functions that allocate file
       16 +     descriptors.  All outstanding record locks owned by the process on the
       17 +     file associated with the file descriptor will be removed (that is,
       18 +     unlocked).
  19   19  
       20 +     If close() is interrupted by a signal that is to be caught, it will
       21 +     return -1 with errno set to EINTR and the state of fildes is unspecified.
       22 +     If an I/O error occurred while reading from or writing to the file system
       23 +     during close(), it returns -1, sets errno to EIO, and the state of fildes
       24 +     is unspecified.
  20   25  
  21      -       If close() is interrupted by a signal that is to be caught, it will
  22      -       return -1 with errno set to EINTR and the state of fildes is
  23      -       unspecified. If an I/O error occurred while reading from or writing to
  24      -       the file system during close(), it returns -1, sets errno to EIO, and
  25      -       the state of fildes is unspecified.
       26 +     When all file descriptors associated with a pipe or FIFO special file are
       27 +     closed, any data remaining in the pipe or FIFO will be discarded.
  26   28  
       29 +     When all file descriptors associated with an open file description have
       30 +     been closed the open file description will be freed.
  27   31  
  28      -       When all file descriptors associated with a pipe or FIFO special file
  29      -       are closed, any data remaining in the pipe or FIFO will be discarded.
       32 +     If the link count of the file is 0, when all file descriptors associated
       33 +     with the file are closed, the space occupied by the file will be freed
       34 +     and the file will no longer be accessible.
  30   35  
       36 +     If a streams-based (see Intro(2)) fildes is closed and the calling
       37 +     process was previously registered to receive a SIGPOLL signal (see
       38 +     signal(3C)) for events associated with that stream (see I_SETSIG in
       39 +     streamio(7I)), the calling process will be unregistered for events
       40 +     associated with the stream.  The last close() for a stream causes the
       41 +     stream associated with fildes to be dismantled.  If O_NONBLOCK and
       42 +     O_NDELAY are not set and there have been no signals posted for the
       43 +     stream, and if there is data on the module's write queue, close() waits
       44 +     up to 15 seconds (for each module and driver) for any output to drain
       45 +     before dismantling the stream.  The time delay can be changed via an
       46 +     I_SETCLTIME ioctl(2) request (see streamio(7I)).  If the O_NONBLOCK or
       47 +     O_NDELAY flag is set, or if there are any pending signals, close() does
       48 +     not wait for output to drain, and dismantles the stream immediately.
  31   49  
  32      -       When all file descriptors associated with an open file description have
  33      -       been closed the open file description will be freed.
       50 +     If fildes is associated with one end of a pipe, the last close() causes a
       51 +     hangup to occur on the other end of the pipe.  In addition, if the other
       52 +     end of the pipe has been named by fattach(3C), then the last close()
       53 +     forces the named end to be detached by fdetach(3C).  If the named end has
       54 +     no open file descriptors associated with it and gets detached, the stream
       55 +     associated with that end is also dismantled.
  34   56  
       57 +     If fildes refers to the manager side of a pseudo-terminal, a SIGHUP
       58 +     signal is sent to the session leader, if any, for which the subsidiary
       59 +     side of the pseudo-terminal is the controlling terminal.  It is
       60 +     unspecified whether closing the manager side of the pseudo-terminal
       61 +     flushes all queued input and output.
  35   62  
  36      -       If the link count of the file is 0, when all file descriptors
  37      -       associated with the file are closed, the space occupied by the file
  38      -       will be freed and the file will no longer be accessible.
       63 +     If fildes refers to the subsidiary side of a streams-based pseudo-
       64 +     terminal, a zero-length message may be sent to the manager.
  39   65  
       66 +     When there is an outstanding cancelable asynchronous I/O operation
       67 +     against fildes when close() is called, that I/O operation is canceled.
       68 +     An I/O operation that is not canceled completes as if the close()
       69 +     operation had not yet occurred.  All operations that are not canceled
       70 +     will complete as if the close() blocked until the operations completed.
  40   71  
  41      -       If a streams-based (see Intro(2)) fildes is closed and the calling
  42      -       process was previously registered to receive a SIGPOLL signal (see
  43      -       signal(3C)) for events associated with that stream (see I_SETSIG in
  44      -       streamio(7I)), the calling process will be unregistered for events
  45      -       associated with the stream.  The last close() for a stream causes the
  46      -       stream associated with fildes to be dismantled. If O_NONBLOCK and
  47      -       O_NDELAY are not set and there have been no signals posted for the
  48      -       stream, and if there is data on the module's write queue, close() waits
  49      -       up to 15 seconds (for each module and driver) for any output to drain
  50      -       before dismantling the stream. The time delay can be changed via an
  51      -       I_SETCLTIME ioctl(2) request (see streamio(7I)). If the O_NONBLOCK or
  52      -       O_NDELAY flag is set, or if there are any pending signals, close() does
  53      -       not wait for output to drain, and dismantles the stream immediately.
       72 +     If a shared memory object or a memory mapped file remains referenced at
       73 +     the last close (that is, a process has it mapped), then the entire
       74 +     contents of the memory object will persist until the memory object
       75 +     becomes unreferenced.  If this is the last close of a shared memory
       76 +     object or a memory mapped file and the close results in the memory object
       77 +     becoming unreferenced, and the memory object has been unlinked, then the
       78 +     memory object will be removed.
  54   79  
       80 +     If fildes refers to a socket, close() causes the socket to be destroyed.
       81 +     If the socket is connection-mode, and the SO_LINGER option is set for the
       82 +     socket with non-zero linger time, and the socket has untransmitted data,
       83 +     then close() will block for up to the current linger interval until all
       84 +     data is transmitted.
  55   85  
  56      -       If fildes is associated with one end of a pipe, the last close() causes
  57      -       a hangup to occur on the other end of the pipe.  In addition, if the
  58      -       other end of the pipe has been named by fattach(3C), then the last
  59      -       close() forces the named end to be detached by fdetach(3C). If the
  60      -       named end has no open file descriptors associated with it and gets
  61      -       detached, the stream associated with that end is also dismantled.
  62      -
  63      -
  64      -       If fildes refers to the master side of a pseudo-terminal, a SIGHUP
  65      -       signal is sent to the session leader, if any, for which the slave side
  66      -       of the pseudo-terminal is the controlling terminal. It is unspecified
  67      -       whether closing the master side of the pseudo-terminal flushes all
  68      -       queued input and output.
  69      -
  70      -
  71      -       If fildes refers to the slave side of a streams-based pseudo-terminal,
  72      -       a zero-length message may be sent to the master.
  73      -
  74      -
  75      -       When there is an outstanding cancelable asynchronous I/O operation
  76      -       against fildes when close() is called, that I/O operation is canceled.
  77      -       An I/O operation that is not canceled completes as if the close()
  78      -       operation had not yet occurred. All operations that are not canceled
  79      -       will complete as if the close() blocked until the operations completed.
  80      -
  81      -
  82      -       If a shared memory object or a memory mapped file remains referenced at
  83      -       the last close (that is, a process has it mapped), then the entire
  84      -       contents of the memory object will persist until the memory object
  85      -       becomes unreferenced. If this is the last close of a shared memory
  86      -       object or a memory mapped file and the close results in the memory
  87      -       object becoming unreferenced, and the memory object has been unlinked,
  88      -       then the memory object will be removed.
  89      -
  90      -
  91      -       If fildes refers to a socket, close() causes the socket to be
  92      -       destroyed.  If the socket is connection-mode, and the SO_LINGER option
  93      -       is set for the socket with non-zero linger time, and the socket has
  94      -       untransmitted data, then close() will block for up to the current
  95      -       linger interval until all data is transmitted.
  96      -
  97   86  RETURN VALUES
  98      -       Upon successful completion, 0 is returned. Otherwise, -1 is returned
  99      -       and errno is set to indicate the error.
       87 +     The close() function returns the value 0 if successful; otherwise the
       88 +     value -1 is returned and the global variable errno is set to indicate the
       89 +     error.
 100   90  
 101      -ERRORS
 102      -       The close() function will fail if:
 103      -
 104      -       EBADF
 105      -                  The fildes argument is not a valid file descriptor.
 106      -
 107      -
 108      -       EINTR
 109      -                  The close() function was interrupted by a signal.
 110      -
 111      -
 112      -       ENOLINK
 113      -                  The fildes argument is on a remote machine and the link to
 114      -                  that machine is no longer active.
 115      -
 116      -
 117      -       ENOSPC
 118      -                  There was no free space remaining on the device containing
 119      -                  the file.
 120      -
 121      -
 122      -
 123      -       The close() function may fail if:
 124      -
 125      -       EIO
 126      -              An I/O error occurred while reading from or writing to the file
 127      -              system.
 128      -
 129      -
 130   91  EXAMPLES
 131      -       Example 1 Reassign a file descriptor.
       92 +     Example 1 Reassign a file descriptor.
 132   93  
       94 +     The following example closes the file descriptor associated with standard
       95 +     output for the current process, re-assigns standard output to a new file
       96 +     descriptor, and closes the original file descriptor to clean up.  This
       97 +     example assumes that the file descriptor 0, which is the descriptor for
       98 +     standard input, is not closed.
 133   99  
 134      -       The following example closes the file descriptor associated with
 135      -       standard output for the current process, re-assigns standard output to
 136      -       a new file descriptor, and closes the original file descriptor to clean
 137      -       up. This example assumes that the file descriptor 0, which is the
 138      -       descriptor for standard input, is not closed.
      100 +           #include <unistd.h>
      101 +           ...
      102 +           int pfd;
      103 +           ...
      104 +           close(1);
      105 +           dup(pfd);
      106 +           close(pfd);
      107 +           ...
 139  108  
      109 +     Incidentally, this is exactly what could be achieved using:
 140  110  
 141      -         #include <unistd.h>
 142      -         ...
 143      -         int pfd;
 144      -         ...
 145      -         close(1);
 146      -         dup(pfd);
 147      -         close(pfd);
 148      -         ...
      111 +           dup2(pfd, 1);
      112 +           close(pfd);
 149  113  
      114 +     Example 2 Close a file descriptor.
 150  115  
      116 +     In the following example, close() is used to close a file descriptor
      117 +     after an unsuccessful attempt is made to associate that file descriptor
      118 +     with a stream.
 151  119  
 152      -       Incidentally, this is exactly what could be achieved using:
      120 +           #include <stdio.h>
      121 +           #include <unistd.h>
      122 +           #include <stdlib.h>
 153  123  
      124 +           #define LOCKFILE "/etc/ptmp"
      125 +           ...
      126 +           int pfd;
      127 +           FILE *fpfd;
      128 +           ...
      129 +           if ((fpfd = fdopen (pfd, "w")) == NULL) {
      130 +                   close(pfd);
      131 +                   unlink(LOCKFILE);
      132 +                   exit(1);
      133 +           }
      134 +           ...
 154  135  
 155      -         dup2(pfd, 1);
 156      -         close(pfd);
      136 +ERRORS
      137 +     The close() function will fail if:
 157  138  
      139 +     EBADF              The fildes argument is not a valid file descriptor.
 158  140  
 159      -       Example 2 Close a file descriptor.
      141 +     EINTR              The close() function was interrupted by a signal.
 160  142  
      143 +     ENOLINK            The fildes argument is on a remote machine and the
      144 +                        link to that machine is no longer active.
 161  145  
 162      -       In the following example, close() is used to close a file descriptor
 163      -       after an unsuccessful attempt is made to associate that file descriptor
 164      -       with a stream.
      146 +     ENOSPC             There was no free space remaining on the device
      147 +                        containing the file.
 165  148  
      149 +     The close() function may fail if:
 166  150  
 167      -         #include <stdio.h>
 168      -         #include <unistd.h>
 169      -         #include <stdlib.h>
      151 +     EIO                An I/O error occurred while reading from or writing to
      152 +                        the file system.
 170  153  
 171      -         #define LOCKFILE "/etc/ptmp"
 172      -         ...
 173      -         int pfd;
 174      -         FILE *fpfd;
 175      -         ...
 176      -         if ((fpfd = fdopen (pfd, "w")) == NULL) {
 177      -                 close(pfd);
 178      -                 unlink(LOCKFILE);
 179      -                 exit(1);
 180      -         }
 181      -         ...
 182      -
 183      -
 184  154  USAGE
 185      -       An application that used the stdio function fopen(3C) to open a file
 186      -       should use the corresponding fclose(3C) function rather than close().
      155 +     An application that used the stdio(3C) function fopen(3C) to open a file
      156 +     should use the corresponding fclose(3C) function rather than close().
 187  157  
 188      -ATTRIBUTES
 189      -       See attributes(5) for descriptions of the following attributes:
      158 +INTERFACE STABILITY
      159 +     Committed
 190  160  
      161 +MT-LEVEL
      162 +     Async-Signal-Safe
 191  163  
 192      -
 193      -
 194      -       +--------------------+-------------------+
 195      -       |  ATTRIBUTE TYPE    |  ATTRIBUTE VALUE  |
 196      -       +--------------------+-------------------+
 197      -       |Interface Stability | Standard          |
 198      -       +--------------------+-------------------+
 199      -       |MT-Level            | Async-Signal-Safe |
 200      -       +--------------------+-------------------+
 201      -
 202  164  SEE ALSO
 203      -       Intro(2), creat(2), dup(2), exec(2), fcntl(2), ioctl(2), open(2)
 204      -       pipe(2), fattach(3C), fclose(3C), fdetach(3C), fopen(3C), signal(3C),
 205      -       signal.h(3HEAD), attributes(5), standards(5), streamio(7I)
      165 +     creat(2), dup(2), exec(2), fcntl(2), Intro(2), ioctl(2), open(2),
      166 +     pipe(2), fattach(3C), fclose(3C), fdetach(3C), fopen(3C), signal(3C),
      167 +     signal.h(3HEAD), attributes(5), standards(5), streamio(7I)
 206  168  
 207      -                               October 18, 2005                       CLOSE(2)
      169 +illumos                        February 5, 2022                        illumos
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX