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 года.