Errno.h - Errno.h
Стандартная библиотека C |
---|
Общие темы |
Разные заголовки |
errno.h это заголовочный файл в стандартная библиотека из Язык программирования C. Это определяет макросы для сообщения и поиска условий ошибки с помощью символа errno
(сокращение от «номер ошибки»).[1]
errno
действует как целочисленная переменная. Значение (номер ошибки) сохраняется в errno
по определенным библиотечные функции когда они обнаруживают ошибки. При запуске программы сохраняется нулевое значение. Библиотечные функции хранят только значения больше нуля. Любая библиотечная функция может изменить значение, сохраненное перед возвратом, независимо от того, обнаруживают они ошибки или нет.[2] Большинство функций указывают, что они обнаружили ошибку, возвращая специальное значение, обычно НОЛЬ для функций, возвращающих указатели, и -1 для функций, возвращающих целые числа. Некоторые функции требуют от вызывающего абонента предварительной настройки errno
до нуля и затем проверьте его, чтобы увидеть, была ли обнаружена ошибка.
В errno
макрос расширяется до lvalue с типом int
, иногда с внешний
и / или летучий
спецификаторы типа в зависимости от платформы.[3] Первоначально это было место статической памяти, но сегодня почти всегда используются макросы, позволяющие многопоточность, так что каждый поток будет видеть свой локальный поток номер ошибки.
Заголовочный файл также определяет макросы, которые расширяются до целочисленных констант, представляющих коды ошибок. В Стандартная библиотека C требуется определить только три:[2]
ЕДОМ
- Результаты из параметра вне домена функции, например
sqrt (-1)
ERANGE
- Результат за пределами диапазона функции, например
strtol ("0xfffffffff", NULL, 0)
в системах с 32-битной ширинойдлинный
EILSEQ (Требуется с 1994 г., поправка 1 к стандарту C89)[4]
- Результат неправильной последовательности байтов, например
mbstowcs (buf, " xff", 1)
в системах, которые используют UTF-8.
POSIX послушный операционные системы подобно AIX, Linux или же Солярис включают много других значений ошибок, многие из которых используются гораздо чаще, чем приведенные выше, например EACCES когда файл не может быть открыт для чтения.[5] C ++ 11 дополнительно определяет многие из тех же значений, что и в спецификации POSIX.[6]
Традиционно первая страница Системные руководства Unix, названный intro (2), перечисляет все макросы errno.h, но это не относится к Linux, где эти макросы вместо этого перечислены в errno (3).[7]
An errno
можно перевести в описательную строку с помощью Strerror (определено в string.h ) или расширение BSD под названием sys_errlist
. Перевод можно распечатать прямо на стандартный поток ошибок с помощью перрор (определено в stdio.h ). В качестве Strerror
во многих Unix-подобных системах не являются поточно-ориентированной версией strerror_r
используется, но противоречивые определения из POSIX и GNU делают его еще менее переносимым, чем sys_errlist
стол.[8]
Смотрите также
Рекомендации
- ^ Международный стандарт языка программирования C (C11), ISO / IEC 9899: 2011, стр. 205
- ^ а б Международный стандарт языка программирования C (C99), ISO / IEC 9899: 1999, стр. 186
- ^ «Проверка на наличие ошибок». Библиотека GNU C (glibc). Проект GNU. 2014-02-08. Получено 2014-06-25.
- ^ «Краткое описание нормативного дополнения 1». Получено 2013-09-12.
- ^ Единая спецификация UNIX, Выпуск 7 из Открытая группа : номера системных ошибок - Справочник базовых определений,
- ^ «Номера ошибок - cppreference.com». Получено 2015-05-08.
- ^ Стивенс и Раго 2013, п. 14.
- ^ Маккейб, Колин. "Проблема со стреррором". www.club.cc.cmu.edu.
Библиография
- Стивенс, У. Ричард; Раго, Стивен А. (24 мая 2013 г.). Расширенное программирование в среде UNIX (Третье изд.). Эддисон-Уэсли Профессионал. ISBN 978-0321637734. Получено 27 февраля 2015.
внешняя ссылка
- FreeBSD Системные вызовы Руководство –
- Linux Программиста Руководство - Библиотечные функции –
- Руководство библиотеки GNU C: коды ошибок
- Списки значений errno в Linux, как числовые, так и символьные