End-Of-File and Errors
======================
Many of the functions described in this chapter return the value of
the macro `EOF' to indicate unsuccessful completion of the operation.
Since `EOF' is used to report both end of file and random errors, it's
often better to use the `feof' function to check explicitly for end of
file and `ferror' to check for errors. These functions check
indicators that are part of the internal state of the stream object,
indicators set if the appropriate condition was detected by a previous
I/O operation on that stream.
- Macro: int EOF
This macro is an integer value that is returned by a number of
narrow stream functions to indicate an end-of-file condition, or
some other error situation. With the GNU library, `EOF' is `-1'.
In other libraries, its value may be some other negative number.
This symbol is declared in `stdio.h'.
- Macro: int WEOF
This macro is an integer value that is returned by a number of wide
stream functions to indicate an end-of-file condition, or some
other error situation. With the GNU library, `WEOF' is `-1'. In
other libraries, its value may be some other negative number.
This symbol is declared in `wchar.h'.
- Function: int feof (FILE *STREAM)
The `feof' function returns nonzero if and only if the end-of-file
indicator for the stream STREAM is set.
This symbol is declared in `stdio.h'.
- Function: int feof_unlocked (FILE *STREAM)
The `feof_unlocked' function is equivalent to the `feof' function
except that it does not implicitly lock the stream.
This function is a GNU extension.
This symbol is declared in `stdio.h'.
- Function: int ferror (FILE *STREAM)
The `ferror' function returns nonzero if and only if the error
indicator for the stream STREAM is set, indicating that an error
has occurred on a previous operation on the stream.
This symbol is declared in `stdio.h'.
- Function: int ferror_unlocked (FILE *STREAM)
The `ferror_unlocked' function is equivalent to the `ferror'
function except that it does not implicitly lock the stream.
This function is a GNU extension.
This symbol is declared in `stdio.h'.
In addition to setting the error indicator associated with the
stream, the functions that operate on streams also set `errno' in the
same way as the corresponding low-level functions that operate on file
descriptors. For example, all of the functions that perform output to a
stream--such as `fputc', `printf', and `fflush'--are implemented in
terms of `write', and all of the `errno' error conditions defined for
`write' are meaningful for these functions. For more information about
the descriptor-level I/O functions, see Note:Low-Level I/O.