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).