stringtranslate.com

errno.h

errno.hзаголовочный файл стандартной библиотеки языка программирования C. Он определяет макросы для сообщения и получения ошибок с помощью символа errno(сокращение от «номер ошибки»). [1]

errnoдействует как целочисленная переменная. Значение (номер ошибки) сохраняется errnoнекоторыми библиотечными функциями при обнаружении ошибок. При запуске программы сохраненное значение равно нулю. Библиотечные функции хранят только значения больше нуля. Любая библиотечная функция может изменить значение, сохраненное перед возвратом, независимо от того, обнаруживают ли они ошибки. [2] Большинство функций указывают, что они обнаружили ошибку, возвращая специальное значение, обычно NULL для функций, возвращающих указатели , и -1 для функций, возвращающих целые числа. Некоторые функции требуют, чтобы вызывающая сторона установила errnoнулевое значение и затем проверила его, чтобы увидеть, была ли обнаружена ошибка.

Макрос errnoрасширяется до lvalue с помощью type int, иногда с помощью спецификаторов externи/или volatileтипа в зависимости от платформы. [3] Первоначально это была статическая ячейка памяти, но сегодня макросы почти всегда используются для обеспечения многопоточности , чтобы каждый поток видел свой собственный локальный номер ошибки.

Файл заголовка также определяет макросы, которые расширяются до целочисленных констант, представляющих коды ошибок. Стандартная библиотека C требует определения только трёх: [2]

ЭДОМ

Результаты параметра вне домена функции, напримерsqrt(-1)

ЭРАНЖ

Результаты результата вне диапазона функции, например, в системах с 32-битной ширинойstrtol("0xfffffffff", NULL, 0)long

EILSEQ (требуется с поправки 1 1994 г. к стандарту C89) [4]

Результат неправильной последовательности байтов, например, в системах, использующих UTF-8 .mbstowcs(buf, "\xff", 1)

POSIX- совместимые операционные системы, такие как AIX , Linux или Solaris , включают множество других значений ошибок, многие из которых используются гораздо чаще, чем приведенные выше, например EACCES , когда файл не может быть открыт для чтения. [5] C++11 дополнительно определяет многие из тех же значений, что и в спецификации POSIX. [6]

Традиционно на первой странице системных руководств Unix , называемой intro(2), перечислены все макросы errno.h, но в Linux это не так , где эти макросы вместо этого перечислены в errno(3). [7]

An errnoможно преобразовать в описательную строку с помощью strerror (определенного в string.h ) или расширения BSD под названием sys_errlist. Перевод можно вывести непосредственно в стандартный поток ошибок , используя perror (определенный в stdio.h ). Поскольку strerrorво многих Unix-подобных системах нет потокобезопасной версии, strerror_rиспользуется поточно-безопасная версия, но противоречивые определения из POSIX и GNU делают ее еще менее переносимой, чем таблица sys_errlist. [8]

Макросы GLIBC

Библиотека GNU C (GLIBC) предоставляет дополнительные макросы значений ошибок POSIX в заголовочном файле errno.h. [9] Это описания макросов, предоставляемых strerror , за исключением 41 и 58, поскольку они не входят в стандарт POSIX :

ЭПЕРМ (1)

операция не разрешена

ЭНОЕНТ (2)

Данный файл или каталог отсутствует

ЭСРЧ (3)

Нет такого процесса

ЭИНТР (4)

Прерванный системный вызов

ЭИО (5)

Ошибка ввода/вывода

ЭНСИО (6)

Нет такого устройства или адреса

Э2БОЛЬШОЙ (7)

Список аргументов слишком длинный

ЭНОЭКСЕК (8)

Ошибка формата Exec

ЭБАДФ (9)

Неверный файловый дескриптор

ЭЧИЛЬД (10)

Нет дочерних процессов

ЕАГЕЙН (11)

Ресурс временно недоступен

ЭНОМЕМ (12)

Невозможно выделить память

ЕАКСЕС (13)

Доступ запрещен

ЭФАУЛЬТ (14)

Неверный адрес

ЭНОБЛК (15)

Требуется блокирующее устройство

ЭБУСИ (16)

Устройство или ресурс заняты

ЭЭКИСТ (17)

Файл существует

ЭКДЕВ (18)

Неверная ссылка на несколько устройств.

ЭНОДЕВ (19)

Нет такого устройства

ЭНОТИР (20)

Не каталог

ЭИСДИР (21)

Это каталог

ЭИНВАЛЬ (22)

Недействительным аргумент

ЭНФИЛЬ (23)

Слишком много открытых файлов в системе

ЭМФИЛЬ (24)

Слишком много открытых файлов

ЭНОТТИ (25)

Неподходящий ioctl для устройства

ЭКТТБСИ (26)

Текстовый файл занят

ЭФБИГ (27)

Файл слишком большой

ЭНОСПЦ (28)

На устройстве нет свободного места

ЭСПАЙП (29)

Незаконный поиск

ЭРОФС (30)

Файловая система только для чтения

ЭМЛИНК (31)

Слишком много ссылок

ЭПИПЕ (32)

Сломанная труба

ЭДОМ (33)

Числовой аргумент вне области определения

ЭРАНЖ (34)

Числовой результат вне диапазона

ЭДЕАДЛК (35)

Блокировка ресурсов предотвращена

ЭНАМЕТУЛОНГ (36)

Имя файла слишком длинное

ЭНОЛК (37)

Нет доступных замков

ЭНОСИС (38)

Функция не реализована

ЭНОТЕМПТИЯ (39)

Каталог не пустой

ЭЛУП (40)

Слишком много уровней символических ссылок

ЭНОМСГ (42)

Нет сообщения нужного типа

ЕИДРМ (43)

Идентификатор удален.

ЕСПЧНГ (44)

Номер канала вне диапазона

ЭЛ2НСИНК (45)

Уровень 2 не синхронизирован

ЭЛ3ХЛТ (46)

Уровень 3 остановлен

ЭЛ3РСТ (47)

Сброс уровня 3

ЭЛНРНГ (48)

Номер ссылки вне диапазона

Юнатч (49)

Драйвер протокола не подключен

ЭНОЦИ (50)

Структура CSI недоступна

ЭЛ2ХЛТ (51)

Уровень 2 остановлен

ЭБАДЕ (52)

Неверный обмен

ЭБАДР (53)

Неверный дескриптор запроса

ИСПОЛНЕННЫЙ (54)

Обмен полный

ЭНОАНО (55)

Нет анода

ЭБАДРКК (56)

Неверный код запроса

ЭБАДСЛТ (57)

Неверный слот

ЭБФОНТ (59)

Неправильный формат файла шрифта

ЭНОСТР (60)

Устройство не поток

ЭНОДАТА (61)

Данные недоступны

ЭТАЙМ (62)

Таймер истек

ЭНОСР (63)

Недостаточно ресурсов потоков

ЭНОНЕТ (64)

Машина не в сети

ЕНОПКГ (65)

Пакет не установлен

ЭРЕМОТ (66)

Объект удален

ЭНОЛИНК (67)

Ссылка была разорвана

ЕАДВ (68)

Ошибка рекламы

ЕСРМНТ (69)

Ошибка монтирования

ЭКОММ (70)

Ошибка связи при отправке

ЭПРОТО (71)

Ошибка протокола

ЭМУЛЬТИХОП (72)

Попытка многопереходного перехода

ЭДОТДОТ (73)

Конкретная ошибка RFS

ЕБАДМСГ (74)

Плохое сообщение

ЭОПЕРЕПОЛНЕНИЕ (75)

Значение слишком велико для определенного типа данных.

ЭНОТУНИК (76)

Имя не уникально в сети

ЕБАДФД (77)

Дескриптор файла в плохом состоянии

ЭРЕМЧГ (78)

Удаленный адрес изменен

ЭЛИБАКК (79)

Невозможно получить доступ к необходимой общей библиотеке.

ЭЛИББАД (80)

Доступ к поврежденной общей библиотеке

ЭЛИБСКН (81)

Раздел .lib в a.out поврежден

ЭЛИБМАКС (82)

Попытка связать слишком много общих библиотек

ЭЛИБЕКЕК (83)

Невозможно запустить общую библиотеку напрямую

ЭИЛСЕК (84)

Неверный или неполный многобайтовый или широкий символ.

ЭРЕСТАРТ (85)

Прерванный системный вызов следует перезапустить.

ЭСТРПАЙП (86)

Ошибка потока потоков

ЭУЗЕРЫ (87)

Слишком много пользователей

ЭНОТСОК (88)

Работа сокета без сокета

ЭДЕСТАДДРРЕК (89)

Требуется адрес назначения

РАЗМЕР ЭМСГ (90)

Сообщение слишком длинное

ЭПРОТОТИП (91)

Неправильный тип протокола для сокета

ЭНОПРОТООПТ (92)

Протокол недоступен

ЭПРОТОНОПОДДЕРЖКА (93)

Протокол не поддерживается

ЭСОКТНООПОРТА (94)

Тип сокета не поддерживается

ЭОПНОЦУПП (95)

Операция не поддерживается

ЭПФНОСУППОРТ (96)

Семейство протоколов не поддерживается

ЭАФНОПОДДЕРЖКА (97)

Семейство адресов не поддерживается протоколом

ЭАДДРИНУСЕ (98)

Адрес уже используется

ЭАДДРНОТАВЕЙЛ (99)

Невозможно назначить запрошенный адрес

ЭНЕТДАУН (100)

Сеть не работает

ЭНЕТУНРИЧ (101)

сеть недоступна

ЭНЕТРЕСЕТ (102)

Сеть разорвала соединение при сбросе

ЭКОНАБОРТЫ (103)

Программное обеспечение вызвало разрыв соединения

ЭКОННЕРЕСЕТ (104)

Сброс соединения партнером

ЭНОБУФС (105)

Нет свободного места в буфере

ЭИСКОНН (106)

Конечная точка транспорта уже подключена

ЭНОТКОНН (107)

Конечная точка транспорта не подключена

ЭШУТДАУН (108)

Невозможно отправить после завершения работы конечной точки транспорта

ЭТООМАНИРЕФС (109)

Слишком много ссылок: невозможно склеить

ЭТИМЕДАУТ (110)

Время соединения истекло

ЭКОННРЕФУС (111)

В соединении отказано

ЭХОСТДАУН (112)

Хост не работает

ЭХОСТАНРИЧ (113)

Нет маршрута к хосту

УЖЕ (114)

Операция уже идет

ЭИНПРОГРЕСС (115)

Сейчас идет операция

ЭСТАЛЕ (116)

Устаревший дескриптор файла

ЕВКЛИН (117)

Конструкция нуждается в чистке

ЭНОТНАМ (118)

Не файл именованного типа XENIX.

ЭНАВАЙЛ (119)

Семафоры XENIX недоступны.

ЭИСНАМ (120)

Это файл именованного типа

ЭРЕМОТЕИО (121)

Ошибка удаленного ввода-вывода

ЭДКО (122)

Дисковая квота превышена

ЭНОМЕДИУМ (123)

Носитель не найден

ЭМЕДИУМТИП (124)

Неправильный тип носителя

ОТМЕНЕНО (125)

Операция отменена

ЭНОКЕЙ (126)

Требуемый ключ недоступен

EKEYистёк срок действия (127)

Срок действия ключа истек

ЭКЕЙОТВОКЕД (128)

Ключ был отозван

ЭКИОТКЛОНЕНО (129)

Ключ отклонен сервисом

ЭВЛАНЕДРЕД (130)

Владелец умер

ЭНОВОССТАНАВЛИВАЕМЫЕ (131)

Состояние не подлежит восстановлению

ЭРФКИЛЛ (132)

Операция невозможна из-за RF-kill

ЯД (133)

На странице памяти имеется аппаратная ошибка

Смотрите также

Рекомендации

  1. ^ Международный стандарт языка программирования C (C11), ISO/IEC 9899:2011, стр. 205
  2. ^ ab Международный стандарт языка программирования C (C99), ISO / IEC 9899: 1999, стр. 186
  3. ^ «Проверка ошибок». Библиотека GNU C (glibc) . Проект ГНУ. 08 февраля 2014 г. Проверено 25 июня 2014 г.
  4. ^ «Краткое описание Нормативного приложения 1» . Проверено 12 сентября 2013 г.
  5. ^ errno.h : номера системных ошибок - Справочник базовых определений, Единая спецификация UNIX , Версия 4 от Открытой группы
  6. ^ «Номера ошибок — cppreference.com» . Проверено 8 мая 2015 г.
  7. ^ Стивенс и Раго 2013, с. 14.
  8. ^ Маккейб, Колин. «Проблема со страхом». www.club.cc.cmu.edu .
  9. ^ «Коды ошибок (Библиотека GNU C)» . www.gnu.org . Проверено 21 октября 2023 г.

Библиография

Внешние ссылки