NAME

     fopen, fdopen, freopen - stream open functions


SYNOPSIS

     #include <stdio.h>

     FILE *fopen (const char *path, const char *mode));
     FILE *fdopen (int fildes, const char *mode));
     FILE *freopen (const char  *path,  const  char  *mode,  FILE
     *stream


DESCRIPTION

     The fopen function opens the file whose name is  the  string
     pointed to by path and associates a stream with it.

     The argument mode points to a string beginning with  one  of
     the  following  sequences  (Additional characters may follow
     these sequences.):

     r    Open text file for reading.  The stream  is  positioned
          at the beginning of the file.

     r+   Open for reading and writing.  The stream is positioned
          at the beginning of the file.

     w    Truncate file to zero length or create  text  file  for
          writing.   The stream is positioned at the beginning of
          the file.

     w+   Open for reading and writing.  The file is  created  if
          it  does  not  exist,  otherwise  it is truncated.  The
          stream is positioned at the beginning of the file.

     a    Open for writing.  The file is created if it  does  not
          exist.   The  stream  is  positioned  at the end of the
          file.

     a+   Open for reading and writing.  The file is  created  if
          it does not exist.  The stream is positioned at the end
          of the file.

     The mode string can also include the letter ``b'' either  as
     a  third  character or as a character between the characters
     in any of the two-character strings described  above.   This
     is  strictly for compatibility with ANSI C3.159-1989 (``ANSI
     C'') and has no effect; the ``b'' is ignored.

     Any created files will  have  mode  S_IRUSR|S_IWUSR|S_IRGRP|
     (0666),  as  modified  by  the  process'  umask  value  (see
     umask(2).


     Reads and writes may be intermixed on read/write streams  in
     any  order.  Note that ANSI C requires that a file position-
     ing function intervene between output and input,  unless  an
     input  operation encounters end-of-file.  (If this condition
     is not met, then a read is allowed to return the  result  of
     writes  other  than  the most recent.)  Therefore it is good
     practice (and indeed sometimes necessary under Linux) to put
     an  fseek or fgetpos operation between write and read opera-
     tions on such a stream.  This operation may be  an  apparent
     no-op  (as  in  fseek(..., 0L, SEEK_CUR) called for its syn-
     chronizing side effect.

     The fdopen function associates a stream  with  the  existing
     file descriptor, fildes.  The mode of the stream (one of the
     values "r", "r+", "w", "w+", "a", "a+") must  be  compatible
     with  the  mode  of  the file descriptor.  The file position
     indicator of the new stream is  set  to  that  belonging  to
     fildes,   and  the  error  and  end-of-file  indicators  are
     cleared.  Modes "w" or "w+" do not cause truncation  of  the
     file.   The  file  descriptor  is not dup'ed.  The result of
     applying fdopen to a shared memory object is undefined.

     The freopen function opens the file whose name is the string
     pointed  to  by path and associates the stream pointed to by
     stream with it.  The  original  stream  (if  it  exists)  is
     closed.   The  mode  argument  is  used just as in the fopen
     function.  The primary use of the  freopen  function  is  to
     change the file associated with a standard text stream


RETURN VALUES

     Upon successful completion fopen, fdopen and freopen  return
     a  FILE pointer.  Otherwise, NULL is returned and the global
     variable errno is set to indicate the error.


ERRORS

     EINVAL
          The mode provided to  fopen,  fdopen,  or  freopen  was
          invalid.

     The fopen, fdopen and freopen functions may  also  fail  and
     set  errno  for  any of the errors specified for the routine
     malloc(3).

     The fopen function may also fail and set errno  for  any  of
     the errors specified for the routine open(2).

     The fdopen function may also fail and set errno for  any  of
     the errors specified for the routine fcntl(2).

     The freopen function may also fail and set errno for any  of
     the errors specified for the routines open(2), fclose(3) and
     fflush(3).


SEE ALSO

     open(2), fclose(3)


STANDARDS

     The fopen and freopen functions conform to ANSI  C3.159-1989
     (``ANSI   C'').    The  fdopen  function  conforms  to  IEEE
     Std1003.1-1988 (``POSIX.1'').