Minix Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
CLOSE(2)                      System Calls Manual                     CLOSE(2)

       close - delete a descriptor

       #include <unistd.h>

       int close(int d)

       The  close  call  deletes  a  descriptor  from  the  per-process object
       reference table.  If this is  the  last  reference  to  the  underlying
       object, then it will be deactivated.  For example, on the last close of
       a file the current seek pointer associated with the file  is  lost;  on
       the last close of a TCP/IP descriptor associated naming information and
       queued data are discarded; on the last  close  of  a  file  holding  an
       advisory lock the lock is released (see further fcntl(2)).

       A  close  of  all  of a process's descriptors is automatic on exit, but
       since there is a limit on the number of active descriptors per process,
       close is necessary for programs that deal with many descriptors.

       When  a  process forks (see fork(2)), all descriptors for the new child
       process reference the same objects as they did in the parent before the
       fork.   If a new process is then to be run using execve(2), the process
       would normally inherit these descriptors.  Most of the descriptors  can
       be  rearranged  with dup2(2) or deleted with close before the execve is
       attempted, but if some of these descriptors will still be needed if the
       execve  fails,  it is necessary to arrange for them to be closed if the
       execve  succeeds.   For  this  reason,  the  call  ``fcntl(d,  F_SETFD,
       flags)''  is  provided, that can be used to mark a descriptor "close on
       exec" by setting the FD_CLOEXEC flag:

              fcntl(d, F_SETFD, fcntl(d, F_GETFD) | FD_CLOEXEC);

       Upon successful completion, a value of 0  is  returned.   Otherwise,  a
       value of -1 is returned and the global integer variable errno is set to
       indicate the error.

       Close will fail if:

       [EBADF]        D is not an active descriptor.

       open(2), pipe(2), execve(2), fcntl(2).

4th Berkeley Distribution        May 22, 1986                         CLOSE(2)