Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
stdio_ВАНЯ.rtf
Скачиваний:
5
Добавлен:
20.07.2019
Размер:
588.72 Кб
Скачать

Int feof(file* stream);

Функция feof проверяет индикатор конца потока в структуре управления, которую адресует указатель stream. Этот индикатор устанавливается, если достигнут конец потока. Функция feof возвращает целочисленное ненулевое значение, когда установлен индикатор конца потока. В противном случае, ее код возврата равен нулю.

Функция ferror применяется для контроля состояния ошибки ввода-вывода. Спецификация формата ее вызова имеет вид:

Int ferror(file* stream);

Функция ferror проверяет индикатор ошибки ввода-вывода в структуре управления потоком, которую адресует указатель stream. Этот индикатор устанавливается при ошибке ввода-вывода. Функция ferror всегда будет возвращать целочисленное ненулевое значение, пока установлен индикатор ошибки. В противном случае, ее код возврата равен нулю.

Функции feof и ferror следует использовать, если необходимо отличить конец потока от ошибки ввода-вывода, когда эти ситуации неразличимы по коду возврата контролируемой библиотечной функции чтения или записи. Например, функция getc возвращает значение EOF в конце потока ввода, также как при ошибке чтения данных. Чтобы одназначно классифицировать состояние потока в этом случае, достаточно вызвать функцию ferror или feof и проверить их код возврата.

Более общий способ контроля ошибок ввода-вывода предоставляет анализ значения внешней целочисленной переменной errno, которая сохраняет код последней ошибки, необязательно ввода-вывода. Коды ошибок индексируют системный массив диагностических сообщений, который адресует указатель sys_errlist. Для отображения диагностики ошибок может быть использована функция perror. Спецификация формата ее вызова имеет вид:

Void perror(conts char* diag);

Функция perror отображает диагностическое сообщение по текущей ошибке через стандартный поток stderr после информационной строки, адресуемой указателем diag. Информационную и диагностическую части вывода функции perror разделяют двоеточие и пробел. Отображение диагностики ошибки автоматически завершает символ перевода строки.

Следующий фрагмент исходного кода демонстрирует применение функции perror для диагностики ошибки, при аварийном завершении функции fopen:

FILE* stream;

if((stream = fopen("any.txt","r")) == NULL) {

perror("any.txt");

..................

} /* if */

Если файл any.txt, специфицированный при вызове функции fopen, не существует, то данный исходный код обеспечит вывод следующего сообщения:

any.txt: No such file or directory

При этом системная переменная errno примет значение 2.

В некоторых случаях перед обращением к функциям чтения-записи полезно проинициализировать флаги состояния в структуре управления потоком, используя функцию clearerr. Спецификация формата ее вызова имеет вид:

Void clearerr(file* stream);

Функция clearerr принудительно сбрасывает индикаторы конца потока и ошибки ввода-вывода для потока, адресуемого указателем stream. При этом гарантируется, что последующие вызовы функций feof и ferror вернут код, равный нулю, независимо от предыстории обработки потока.

Завершение обработки потока ввода-вывода

После выполнения всех необходимых операций буферизованного ввода-вывода следует корректно завершить обработку файлового потока вызовом функции fclose. Спецификация формата обращения к ней имеет вид:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]