Стандартная библиотека C |
---|
Общие темы |
Разные заголовки |
errno.h является заголовочный файл в стандартной библиотеке на языке программирования Си . Он определяет макросы для сообщения и получения условий ошибки с помощью символа errno
(сокращение от «номер ошибки»). [1]
errno
действует как целочисленная переменная. Значение (номер ошибки) сохраняется в errno
определенных библиотечных функциях при обнаружении ошибок. При запуске программы сохраняется нулевое значение. Библиотечные функции хранят только значения больше нуля. Любая библиотечная функция может изменить значение, сохраненное перед возвратом, независимо от того, обнаруживают они ошибки или нет. [2] Большинство функций указывают на то, что они обнаружили ошибку, возвращая специальное значение, обычно NULL для функций, возвращающих указатели , и -1 для функций, возвращающих целые числа. Некоторые функции требуют, чтобы вызывающий абонент предварительно errno
установил нулевое значение и затем протестировал его, чтобы увидеть, была ли обнаружена ошибка.
В errno
макрос раскрывается в именующее с типом int
, иногда с extern
и / или volatile
спецификаторов типа в зависимости от платформы. [3] Первоначально это было место статической памяти, но сегодня почти всегда используются макросы, чтобы обеспечить многопоточность , так что каждый поток будет видеть свой собственный номер локальной ошибки потока .
Заголовочный файл также определяет макросы, которые расширяются до целочисленных констант, представляющих коды ошибок. Для стандартной библиотеки C необходимо определить только три: [2]
ЕДОМ
- Результаты из параметра вне домена функции, например
sqrt(-1)
ERANGE
- Результат за пределами диапазона функции, например,
strtol("0xfffffffff",NULL,0)
в системах с 32-битной ширинойlong
EILSEQ (требуется с 1994 г., поправка 1 к стандарту C89) [4]
- Результат неправильной последовательности байтов, например,
mbstowcs(buf,"\xff", 1)
в системах, использующих UTF-8 .
Операционные системы, совместимые с 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]
См. Также [ править ]
- перрор
- Strerror
Ссылки [ править ]
- ^ Международный стандарт языка программирования C (C11), ISO / IEC 9899: 2011, стр. 205
- ^ a b Международный стандарт языка программирования C (C99), ISO / IEC 9899: 1999, стр. 186
- ^ «Проверка на наличие ошибок» . Библиотека GNU C (glibc) . Проект GNU. 2014-02-08 . Проверено 25 июня 2014 .
- ^ «Краткое описание нормативного дополнения 1» . Проверено 12 сентября 2013 .
- ^ : номера системных ошибок - Справочник по базовым определениям, Единая спецификация UNIX , выпуск 7 от The Open Group
- ^ «Номера ошибок - cppreference.com» . Проверено 8 мая 2015 .
- ^ Стивенс и Раго 2013 , стр. 14.
- ^ Маккейб, Колин. "Проблема со стреррором" . www.club.cc.cmu.edu .
Библиография [ править ]
- Стивенс, У. Ричард; Раго, Стивен А. (24 мая 2013 г.). Расширенное программирование в среде UNIX (Третье изд.). Эддисон-Уэсли Профессионал . ISBN 978-0321637734. Проверено 27 февраля 2015 года .
Внешние ссылки [ править ]
- - Руководство по системным вызовам FreeBSD
- - Руководство программиста Linux - Функции библиотеки
- Руководство по библиотеке GNU C: Коды ошибок
- Списки значений errno в Linux, как числовые, так и символьные