errno.h — заголовочный файл стандартной библиотеки языка программирования C. Он определяет макросы для сообщения и получения ошибок с помощью символа errno
(сокращение от «номер ошибки»). [1]
errno
действует как целочисленная переменная. Значение (номер ошибки) сохраняется errno
некоторыми библиотечными функциями при обнаружении ошибок. При запуске программы сохраненное значение равно нулю. Библиотечные функции хранят только значения больше нуля. Любая библиотечная функция может изменить значение, сохраненное перед возвратом, независимо от того, обнаруживают ли они ошибки. [2] Большинство функций указывают, что они обнаружили ошибку, возвращая специальное значение, обычно NULL для функций, возвращающих указатели , и -1 для функций, возвращающих целые числа. Некоторые функции требуют, чтобы вызывающая сторона установила errno
нулевое значение и затем проверила его, чтобы увидеть, была ли обнаружена ошибка.
Макрос errno
расширяется до lvalue с помощью type int
, иногда с помощью спецификаторов extern
и/или volatile
типа в зависимости от платформы. [3] Первоначально это была статическая ячейка памяти, но сегодня макросы почти всегда используются для обеспечения многопоточности , чтобы каждый поток видел свой собственный локальный номер ошибки.
Файл заголовка также определяет макросы, которые расширяются до целочисленных констант, представляющих коды ошибок. Стандартная библиотека C требует определения только трёх: [2]
ЭДОМ
sqrt(-1)
ЭРАНЖ
strtol("0xfffffffff", NULL, 0)
long
EILSEQ (требуется с поправки 1 1994 г. к стандарту C89) [4]
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]
Библиотека GNU C (GLIBC) предоставляет дополнительные макросы значений ошибок POSIX в заголовочном файле errno.h
. [9] Это описания макросов, предоставляемых strerror , за исключением 41 и 58, поскольку они не входят в стандарт POSIX :
ЭПЕРМ (1)
ЭНОЕНТ (2)
ЭСРЧ (3)
ЭИНТР (4)
ЭИО (5)
ЭНСИО (6)
Э2БОЛЬШОЙ (7)
ЭНОЭКСЕК (8)
ЭБАДФ (9)
ЭЧИЛЬД (10)
ЕАГЕЙН (11)
ЭНОМЕМ (12)
ЕАКСЕС (13)
ЭФАУЛЬТ (14)
ЭНОБЛК (15)
ЭБУСИ (16)
ЭЭКИСТ (17)
ЭКДЕВ (18)
ЭНОДЕВ (19)
ЭНОТИР (20)
ЭИСДИР (21)
ЭИНВАЛЬ (22)
ЭНФИЛЬ (23)
ЭМФИЛЬ (24)
ЭНОТТИ (25)
ЭКТТБСИ (26)
ЭФБИГ (27)
ЭНОСПЦ (28)
ЭСПАЙП (29)
ЭРОФС (30)
ЭМЛИНК (31)
ЭПИПЕ (32)
ЭДОМ (33)
ЭРАНЖ (34)
ЭДЕАДЛК (35)
ЭНАМЕТУЛОНГ (36)
ЭНОЛК (37)
ЭНОСИС (38)
ЭНОТЕМПТИЯ (39)
ЭЛУП (40)
ЭНОМСГ (42)
ЕИДРМ (43)
ЕСПЧНГ (44)
ЭЛ2НСИНК (45)
ЭЛ3ХЛТ (46)
ЭЛ3РСТ (47)
ЭЛНРНГ (48)
Юнатч (49)
ЭНОЦИ (50)
ЭЛ2ХЛТ (51)
ЭБАДЕ (52)
ЭБАДР (53)
ИСПОЛНЕННЫЙ (54)
ЭНОАНО (55)
ЭБАДРКК (56)
ЭБАДСЛТ (57)
ЭБФОНТ (59)
ЭНОСТР (60)
ЭНОДАТА (61)
ЭТАЙМ (62)
ЭНОСР (63)
ЭНОНЕТ (64)
ЕНОПКГ (65)
ЭРЕМОТ (66)
ЭНОЛИНК (67)
ЕАДВ (68)
ЕСРМНТ (69)
ЭКОММ (70)
ЭПРОТО (71)
ЭМУЛЬТИХОП (72)
ЭДОТДОТ (73)
ЕБАДМСГ (74)
ЭОПЕРЕПОЛНЕНИЕ (75)
ЭНОТУНИК (76)
ЕБАДФД (77)
ЭРЕМЧГ (78)
ЭЛИБАКК (79)
ЭЛИББАД (80)
ЭЛИБСКН (81)
ЭЛИБМАКС (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)
ЭНАВАЙЛ (119)
ЭИСНАМ (120)
ЭРЕМОТЕИО (121)
ЭДКО (122)
ЭНОМЕДИУМ (123)
ЭМЕДИУМТИП (124)
ОТМЕНЕНО (125)
ЭНОКЕЙ (126)
EKEYистёк срок действия (127)
ЭКЕЙОТВОКЕД (128)
ЭКИОТКЛОНЕНО (129)
ЭВЛАНЕДРЕД (130)
ЭНОВОССТАНАВЛИВАЕМЫЕ (131)
ЭРФКИЛЛ (132)
ЯД (133)