errno.h

Стандартная библиотека
языка программирования С

errno.h — заголовочный файл стандартной библиотеки языка программирования С[1], содержащий объявление макроса для идентификации ошибок через их код. POSIX-совместимые операционные системы, наподобие Unix и Linux, могут включать другие макросы для определения ошибок через собственные коды errno. Значение errno имеет смысл только тогда, когда системный вызов или функция возвращает признак ошибки.

Макросы и типы

[править | править код]
#include <errno.h> #define EDOM #define EILSEQ #define ERANGE extern int errno; 

Заголовочный файл определяет следующие макросы: EDOM, EILSEQ, ERANGE. Они имеют тип int, имеют положительное значение и могут использоваться в препроцессорных директивах #if. При запуске программы значение errno равно нулю.

Макрос Расшифровка Смысловое значение
EDOM Error domain Ошибка области определения
EILSEQ Error invalid sequence Ошибочная последовательность байтов
ERANGE Error range Результат слишком велик

Заголовочный файл определяет errno как изменяемое lvalue, которое может быть макросом или идентификатором с внешним связыванием.

В случае ошибки некоторые библиотечные функции заносят в errno положительное значение, но никогда не обнуляют его. Стандарт не специфицирует какие-либо иные коды ошибок.[2]

Сообщение об ошибке может быть получено с помощью потокобезопасной функции strerror_r() (strerror() для однопоточных программ) или выведено в поток ошибок с помощью perror().

Стандарт POSIX определяет следующие символьные имена ошибок[3]:

Макрос Сообщение
E2BIG Список аргументов слишком длинный
EACCES Отказ в доступе
EADDRINUSE Адрес используется
EADDRNOTAVAIL Адрес недоступен
EAFNOSUPPORT Семейство адресов не поддерживается
EAGAIN Ресурс временно недоступен
EALREADY Соединение уже устанавливается
EBADF Неправильный дескриптор файла
EBADMSG Неправильное сообщение
EBUSY Ресурс занят
ECANCELED Операция отменена
ECHILD Нет дочернего процесса
ECONNABORTED Соединение прервано
ECONNREFUSED Соединение отклонено
EDEADLK Обход тупика ресурсов
EDESTADDRREQ Требуется адрес назначения
EDOM Ошибка области определения
EDQUOT Зарезервировано
EEXIST Файл существует
EFAULT Неправильный адрес
EFBIG Файл слишком велик
EHOSTUNREACH Хост недоступен
EIDRM Идентификатор удален
EILSEQ Ошибочная последовательность байтов
EINPROGRESS Операция в процессе выполнения
EINTR Прерванный вызов функции
EINVAL Неправильный аргумент
EIO Ошибка ввода-вывода
EISCONN Сокет (уже) соединен
EISDIR Это каталог
ELOOP Слишком много уровней символических ссылок
EMFILE Слишком много открытых файлов
EMLINK Слишком много связей
EMSGSIZE Неопределённая длина буфера сообщения
EMULTIHOP Зарезервировано
ENAMETOOLONG Имя файла слишком длинное
ENETDOWN Сеть не работает
ENETRESET Соединение прервано сетью
ENETUNREACH Сеть недоступна
ENFILE Слишком много открытых файлов в системе
ENOBUFS Буферное пространство недоступно
ENODEV Нет такого устройства
ENOENT Нет такого файла или каталога
ENOEXEC Ошибка формата исполняемого файла
ENOLCK Блокировка недоступна
ENOLINK Зарезервировано
ENOMEM Недостаточно памяти
ENOMSG Сообщение нужного типа отсутствует
ENOPROTOOPT Протокол недоступен
ENOSPC Памяти на устройстве не осталось
ENOSYS Функция не реализована
ENOTCONN Сокет не соединен
ENOTDIR Это не каталог
ENOTEMPTY Каталог непустой
ENOTSOCK Это не сокет
ENOTSUP Не поддерживается
ENOTTY Неопределённая операция управления вводом-выводом
ENXIO Нет такого устройства или адреса
EOPNOTSUPP Операция сокета не поддерживается
EOVERFLOW Слишком большое значение для типа данных
EPERM Операция не разрешена
EPIPE Разрушенный канал
EPROTO Ошибка протокола
EPROTONOSUPPORT Протокол не поддерживается
EPROTOTYPE Ошибочный тип протокола для сокета
ERANGE Результат слишком велик
EROFS Файловая система только на чтение
ESPIPE Неправильное позиционирование
ESRCH Нет такого процесса
ESTALE Зарезервировано
ETIMEDOUT Операция задержана
ETXTBSY Текстовый файл занят
EWOULDBLOCK Блокирующая операция
EXDEV Неопределённая связь

Примечания

[править | править код]
  1. ISO IEC 9899 1999 - C99, §7.5
  2. ISO/IEC 9899:1999. Дата обращения: 30 июля 2011. Архивировано 22 августа 2011 года.
  3. Системное руководство по использованию errno.h. Дата обращения: 17 января 2012. Архивировано 4 марта 2016 года.