Node:Opening Streams, Next:Closing Streams, Previous:Standard Streams, Up:I/O on Streams
Opening a file with the fopen
function creates a new stream and
establishes a connection between the stream and a file. This may
involve creating a new file.
Everything described in this section is declared in the header file
stdio.h
.
FILE * fopen (const char *filename, const char *opentype) | Function |
The fopen function opens a stream for I/O to the file
filename, and returns a pointer to the stream.
The opentype argument is a string that controls how the file is opened and specifies attributes of the resulting stream. It must begin with one of the following sequences of characters:
As you can see, Additional characters may appear after these to specify flags for the
call. Always put the mode ( The GNU C library defines one additional character for use in
opentype: the character The character If the opentype string contains the sequence
Any other characters in opentype are simply ignored. They may be meaningful in other systems. If the open fails, When the sources are compiling with |
You can have multiple streams (or file descriptors) pointing to the same file open at the same time. If you do only input, this works straightforwardly, but you must be careful if any output streams are included. See Stream/Descriptor Precautions. This is equally true whether the streams are in one program (not usual) or in several programs (which can easily happen). It may be advantageous to use the file locking facilities to avoid simultaneous access. See File Locks.
FILE * fopen64 (const char *filename, const char *opentype) | Function |
This function is similar to fopen but the stream it returns a
pointer for is opened using open64 . Therefore this stream can be
used even on files larger then 2^31 bytes on 32 bit machines.
Please note that the return type is still If the sources are compiled with |
int FOPEN_MAX | Macro |
The value of this macro is an integer constant expression that
represents the minimum number of streams that the implementation
guarantees can be open simultaneously. You might be able to open more
than this many streams, but that is not guaranteed. The value of this
constant is at least eight, which includes the three standard streams
stdin , stdout , and stderr . In POSIX.1 systems this
value is determined by the OPEN_MAX parameter; see General Limits. In BSD and GNU, it is controlled by the RLIMIT_NOFILE
resource limit; see Limits on Resources.
|
FILE * freopen (const char *filename, const char *opentype, FILE *stream) | Function |
This function is like a combination of fclose and fopen .
It first closes the stream referred to by stream, ignoring any
errors that are detected in the process. (Because errors are ignored,
you should not use freopen on an output stream if you have
actually done any output using the stream.) Then the file named by
filename is opened with mode opentype as for fopen ,
and associated with the same stream object stream.
If the operation fails, a null pointer is returned; otherwise,
When the sources are compiling with |
FILE * freopen64 (const char *filename, const char *opentype, FILE *stream) | Function |
This function is similar to freopen . The only difference is that
on 32 bit machine the stream returned is able to read beyond the
2^31 bytes limits imposed by the normal interface. It should be
noted that the stream pointed to by stream need not be opened
using fopen64 or freopen64 since its mode is not important
for this function.
If the sources are compiled with |
In some situations it is useful to know whether a given stream is available for reading or writing. This information is normally not available and would have to be remembered separately. Solaris introduced a few functions to get this information from the stream descriptor and these functions are also available in the GNU C library.
int __freadable (FILE *stream) | Function |
The __freadable function determines whether the stream
stream was opened to allow reading. In this case the return value
is nonzero. For write-only streams the function returns zero.
This function is declared in |
int __fwritable (FILE *stream) | Function |
The __fwritable function determines whether the stream
stream was opened to allow writing. In this case the return value
is nonzero. For read-only streams the function returns zero.
This function is declared in |
For slightly different kind of problems there are two more functions. They provide even finer-grained information.
int __freading (FILE *stream) | Function |
The __freading function determines whether the stream
stream was last read from or whether it is opened read-only. In
this case the return value is nonzero, otherwise it is zero.
Determining whether a stream opened for reading and writing was last
used for writing allows to draw conclusions about the content about the
buffer, among other things.
This function is declared in |
int __fwriting (FILE *stream) | Function |
The __fwriting function determines whether the stream
stream was last written to or whether it is opened write-only. In
this case the return value is nonzero, otherwise it is zero.
This function is declared in |