# close(2)

    NAME
         close - delete a descriptor

    SYNOPSIS
         #include <unistd.h>

         int close(int d)

    DESCRIPTION
         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);

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

    ERRORS
         Close will fail if:

         [EBADF]        D is not an active descriptor.

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