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 hold-
     ing  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  rear-
     ranged  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.   Oth-
     erwise,  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).