close - close a file descriptor


SYNOPSIS

       #include <unistd.h>

       int close(int fd);


DESCRIPTION

       close  closes  a  file  descriptor,  so  that it no longer
       refers to any file and may be reused. Any  locks  held  on
       the file it was associated with, and owned by the process,
       are removed (regardless of the file  descriptor  that  was
       used to obtain the lock).

       If fd is the last copy of a particular file descriptor the
       resources associated with it are freed; if the  descriptor
       was  the  last  reference to a file which has been removed
       using unlink(2) the file is deleted.


RETURN VALUE

       close returns zero on success, or -1 if an error occurred.


ERRORS

       EBADF  fd isn't a valid open file descriptor.


CONFORMING TO

       SVr4,  SVID,  POSIX,  X/OPEN,  BSD 4.3.  SVr4 documents an
       additional ENOLINK error condition.


NOTES

       Not checking the return value of close  is  a  common  but
       nevertheless   serious  programming  error.   File  system
       implementations which use techniques  as  ``write-behind''
       to  increase  performance may lead to write(2) succeeding,
       although the data has not been  written  yet.   The  error
       status  may be reported at a later write operation, but it
       is guaranteed to be reported on  closing  the  file.   Not
       checking  the  return value when closing the file may lead
       to silent loss of data.  This can especially  be  observed
       with NFS and disk quotas.

       A  successful  close  does not guarantee that the data has
       been successfully saved to  disk,  as  the  kernel  defers
       writes.  Is  not  common  for  a  filesystem  to flush the
       buffers when the stream is closed. If you need to be  sure
       that  the  data  is  physically  stored  use  fsync(2)  or
       sync(2), they will get you closer to that  goal  (it  will
       depend on the disk hardware at this point).


SEE ALSO

       open(2), fcntl(2), shutdown(2), unlink(2), fclose(3)