Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Ссылки [ править ]

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

Библиография [ править ]

  • Стивенс, У. Ричард; Раго, Стивен А. (24 мая 2013 г.). Расширенное программирование в среде UNIX (Третье изд.). Эддисон-Уэсли Профессионал . ISBN 978-0321637734. Проверено 27 февраля 2015 года .

Внешние ссылки [ править ]

  • intro(2) -  Руководство по системным вызовам FreeBSD
  • errno(3) -  Руководство программиста Linux - Функции библиотеки
  • Руководство по библиотеке GNU C: Коды ошибок
  • Списки значений errno в Linux, как числовые, так и символьные