errno, _doserrno, _sys_errlist, and _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.

Константа

Системное сообщение об ошибке

Значение

EPERM

Операция не разрешена

1

ENOENT

Отсутствует такой файл или каталог

2

ESRCH

Отсутствует такой процесс

3

EINTR

Прерванная функция

4

EIO

Ошибка ввода-вывода

5

ENXIO

Отсутствует такое устройство или адрес

6

E2BIG

Список аргументов слишком длинный

7

ENOEXEC

Ошибка формата exec

8

EBADF

Неверный номер файла

9

ECHILD

Нет порожденных процессов

10

EAGAIN

Больше процессов нет или недостаточно памяти, или достигнут максимальный уровень вложенности

11

ENOMEM

Недостаточно памяти

12

EACCES

В разрешении отказано

13

EFAULT

Неверный адрес

14

EBUSY

Устройство или ресурс заняты

16

EEXIST

Файл существует

17

EXDEV

Ссылка другого устройства

18

ENODEV

Нет такого устройства

19

ENOTDIR

Не является каталогом

20

EISDIR

Является каталогом

21

EINVAL

Недопустимый аргумент

22

ENFILE

Слишком много файлов открыто в системе

23

EMFILE

Слишком много открытых файлов

24

ENOTTY

Неподходящая операция управления вводом-выводом

25

EFBIG

Файл слишком велик

27

ENOSPC

На устройстве не осталось места

28

ESPIPE

Недопустимый поиск

29

EROFS

Файловая система доступна только для чтения

30

EMLINK

Слишком много ссылок

31

EPIPE

Канал нарушен

32

EDOM

Математический аргумент

33

ERANGE

Результат слишком большой

34

EDEADLK

Может произойти взаимоблокировка ресурсов

36

EDEADLOCK

Аналогично EDEADLK для обеспечения совместимости с предыдущими версиями Microsoft C

36

ENAMETOOLONG

Слишком длинное имя файла

38

ENOLCK

Нет доступных блокировок

39

ENOSYS

Функция не поддерживается

40

ENOTEMPTY

Каталог не пуст

41

EILSEQ

Недопустимая последовательность байтов

42

STRUNCATE

Строка была обрезана

80

Требования

Глобальный макрос

Обязательный заголовок

Необязательный заголовок

errno

<errno.h> или <stdlib.h>, <cerrno> или <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