Поделиться через


errno, _doserrno, _sys_errlist и _sys_nerr

Глобальные макросы, которые содержат коды ошибок, задаваемые во время выполнения программы, и строковые эквиваленты кодов ошибок для отображения на экране.

Синтаксис

#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())

Замечания

Как для errno, так и для _doserrno средой выполнения во время запуска программы задается значение 0. errno возникает при ошибке в вызове системного уровня. Поскольку errno хранит значение для последнего вызова, задавшего его, это значение может быть изменено успешными вызовами. Вызовы библиотеки во время выполнения, заданные errno при ошибке, не очищаются errno при успешном выполнении. Всегда сбрасывайте errno путем вызова функции _set_errno(0) сразу после вызова, который мог задать значение этой переменной, и проверяйте его сразу после вызова.

При ошибке не обязательно задано то же значение, errno что и код ошибки, возвращаемый системным вызовом. Для операций ввода-вывода _doserrno хранит коды ошибок операционной системы, эквивалентные кодам errno. Для большинства операций, отличных от ввода-вывода, значение _doserrno не задано.

Каждое errno значение связано с сообщением об ошибке, _sys_errlist которое может быть напечатано с помощью одной из perror функций или хранимых в строке с помощью одной из strerror функций или strerror_s функций. perror и strerror используют массив _sys_errlist и _sys_nerr (количество элементов в _sys_errlist) для обработки сведений об ошибке. Прямой доступ к _sys_errlist и _sys_nerr является нерекомендуемым по причинам безопасности кода. Рекомендуется использовать более безопасные функциональные версии вместо глобальных макросов, как показано ниже.

Глобальный макрос Функциональные эквиваленты
_doserrno _get_doserrno, _set_doserrno
errno _get_errno, _set_errno
_sys_errlist, _sys_nerr strerror_s, , _strerror_s_wcserror_s__wcserror_s

Математические подпрограммы библиотеки, заданные errno путем вызова _matherr. Для обработки математических ошибок иным образом напишите собственную процедуру в соответствии с базовым описанием _matherr и назовите ее _matherr.

Все errno значения являются предопределенными константами и <errno.h>совместимы с UNIX. Только ERANGE, EILSEQ и EDOM определены в стандарте ISO C99. Полный список см errno . в константы.

Требования

Глобальный макрос Обязательный заголовок Необязательный заголовок
errno <errno.h><cerrno> или <stdlib.h><cstdlib> (C++)
_doserrno, , _sys_errlist_sys_nerr <stdlib.h>, <cstdlib> (C++) <errno.h>, <cerrno> (C++)

Макросы _doserrno, _sys_errlist и _sys_nerr являются расширениями Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.

См. также

Глобальные переменные
errno Константы
perror, _wperror
strerror, , _strerror_wcserror__wcserror
strerror_s, , _strerror_s_wcserror_s__wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno