Книга: Основы программирования в Linux
Ошибки потока
Ошибки потока
Для обозначения ошибок многие функции библиотеки stdio применяют значения за пределами допустимых, например, пустые указатели или константу EOF
. В этих случаях ошибка указывается во внешней переменной errno
.
#include <errno.h>
extern int errno;
Примечание
Имейте в виду, что многие функции могут изменять значение errno
. Оно достоверно, только когда функция закончилась неудачно. Вам следует проверять это значение сразу же, как функция сообщила о сбое. Прежде чем использовать его, скопируйте это значение в другую переменную, поскольку функции вывода, такие как fprintf
, могут сами изменять errno
.
Вы можете также запросить состояние файлового потока, чтобы выяснить, возникла ли ошибка или достигнут конец файла.
#include <stdio.h>
int ferror(FILE *stream);
int feof(FILE *stream);
void clearerr(FILE *stream);
Функция ferror
проверяет индикатор ошибок потока и возвращает ненулевое значение, если индикатор установлен, и ноль в противном случае.
Функция feof
проверяет индикатор конца файла в потоке и возвращает ненулевое значение, если индикатор установлен, или ноль в противном случае. Применяйте ее следующим образом:
if (feof(some_stream))
/* Мы в конце */
Функция clearerr
очищает индикаторы конца файла и ошибки для потока, на который указывает параметр stream
. Она не возвращает никакого значения, и для нее не определены никакие ошибки. Вы можете применять эту функцию для сброса состояния ошибки в потоках. Примером может быть возобновление записи в поток после разрешения проблемы, связанной с ошибкой "disk full" (диск заполнен).
- Возможные ловушки и распространенные ошибки
- Б.2. Основные функции для работы с потоками: создание и завершение
- 3.2.4. Ошибки при задавании вопросов
- Ошибки проектирования базы данных
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Часть четвертая Стратегии защиты от Главной Ошибки
- 4.4. Типичные ошибки распределения прав
- Применение основного потока
- Ошибки при подсчете СТП
- Пример использования фонового потока для выполнения отдельной задачи
- 2.5.3. Возможные ошибки
- Листинг 5.8. (dup2.c) Перенаправление выходного потока канала с помощью функции dup2()