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]
POSIX
[править | править код]Сообщение об ошибке может быть получено с помощью потокобезопасной функции 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 | Неопределённая связь |
Ссылки
[править | править код]errno.h
— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)
Примечания
[править | править код]- ↑ ISO IEC 9899 1999 - C99, §7.5
- ↑ ISO/IEC 9899:1999 . Дата обращения: 30 июля 2011. Архивировано 22 августа 2011 года.
- ↑ Системное руководство по использованию errno.h . Дата обращения: 17 января 2012. Архивировано 4 марта 2016 года.