NAME
fopen, freopen, fdopen - open a stream
SYNOPSIS
#include <stdio.h>
FILE *fopen(filename, type)
const char *filename, *type;
FILE *freopen(filename, type,
stream)
const char *filename, *type;
FILE *stream;
FILE *fdopen(fildes, type)
int fildes;
const char *type;
DESCRIPTION
Fopen opens the file named by filename and associates a
stream with
it. Fopen returns a pointer to be used to identify the
stream in
subsequent operations.
Type is a character string having one of the following values:
"r" open for reading
"w" create for writing
"a" append: open for writing at end of file, or create for writing
In addition, each type may be
followed by a "+" to have the file
opened for reading and writing. "r+" positions the
stream at the
beginning of the file, "w+" creates or truncates
it, and "a+"
positions it at the end. Both reads and writes may be used
on
read/write streams, with the limitation that an fseek,
rewind, or
reading an end-of-file must be used between a read and a
write or
vice-versa.
Freopen substitutes the named
file in place of the open stream. It
returns the original value of stream. The original stream is
closed.
Freopen is typically used to
attach the preopened constant names,
stdin, stdout, stderr, to specified files.
Fdopen associates a stream with
a file descriptor obtained from
open, dup, creat, or pipe(2). The type of the stream must
agree
with the mode of the open file.
SEE ALSO
open(2), fclose(3)
DIAGNOSTICS
Fopen and freopen return the pointer NULL if filename cannot
be
accessed, if too many files are already open, or if other
resources
needed cannot be allocated.
BUGS
Fdopen is not portable to systems other than UNIX.
The read/write types do not
exist on all systems. Those systems
without read/write modes will probably treat the type as if
the "+"
was not present. These are unreliable in any event.
In order to support the same
number of open files as does the
system, fopen must allocate additional memory for data
structures
using calloc after 20 files have been opened. This confuses
some
programs which use their own memory allocators. An
undocumented
routine, f_prealloc, may be called to force immediate
allocation of
all internal memory except for buffers.