errno, _doserrno, _sys_errlist y _sys_nerr

Macros globales que contienen códigos de error que se establecen durante la ejecución del programa, así como los equivalentes de cadena de esos códigos para mostrarlos.

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

Comentarios

El runtime establece en 0 errno y _doserrno durante el inicio del programa. errno se establece en un error en una llamada de nivel del sistema. Puesto que errno contiene el valor de la última llamada que la estableció, las llamadas posteriores pueden cambiar este valor. Llamadas de la biblioteca en tiempo de ejecución que establecen errno en un error no borran errno si la operación se realiza correctamente. Borre siempre errno llamando a _set_errno(0) inmediatamente antes de que una llamada pueda establecerlo, y compruébelo inmediatamente después de la llamada.

Si se produce un error, errno no se establece necesariamente en el mismo valor que el código de error devuelto por una llamada del sistema. En operaciones de E/S, _doserrno almacena los equivalentes de código de error del sistema operativo de los códigos de errno. En la mayoría de las operaciones que no son de E/S, el valor de _doserrno no se establece.

Cada valor de errno se asocia a un mensaje de error en _sys_errlist que se puede imprimir mediante una de las funciones perror o almacenar en una cadena mediante las funciones strerror o strerror_s. Las funciones perror y strerror usan la matriz _sys_errlist y _sys_nerr (número de elementos en _sys_errlist) para procesar la información del error. El acceso directo a _sys_errlist y _sys_nerr está en desuso por motivos de seguridad de código. Se recomienda usar las versiones funcionales y más seguras en lugar de emplear macros globales, como se muestra aquí:

Macro global

Equivalentes funcionales

_doserrno

_get_doserrno, _set_doserrno

errno

_get_errno, _set_errno

_sys_errlist, _sys_nerr

strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Las rutinas matemáticas de la biblioteca establecen errno llamando a _matherr. Para controlar los errores matemáticos de otra manera, escriba su propia rutina de acuerdo con la descripción de referencia de _matherr y asígnele el nombre _matherr.

Todos los valores de errno de la siguiente tabla son constantes predefinidas en <errno.h> y son compatibles con UNIX. Solo ERANGE, EILSEQ y EDOM se especifican en el estándar ISO C99.

Constante

Mensaje de error del sistema

Valor

EPERM

Operación no permitida

1

ENOENT

No existe ese archivo o directorio

2

ESRCH

No existe tal proceso

3

EINTR

Función interrumpida

4

EIO

Error de E/S

5

ENXIO

No existe tal dispositivo o dirección

6

E2BIG

Lista de argumentos demasiado larga

7

ENOEXEC

Error de formato exec

8

EBADF

Número de archivo incorrecto

9

ECHILD

No hay procesos de compilación

10

EAGAIN

No hay más procesos, memoria insuficiente o se alcanzó el nivel de anidamiento máximo

11

ENOMEM

Memoria insuficiente

12

EACCES

Permiso denegado

13

EFAULT

Dirección incorrecta

14

EBUSY

Dispositivo o recurso no disponible

16

EEXIST

El archivo existe

17

EXDEV

Vínculo de dispositivo cruzado

18

ENODEV

No existe tal dispositivo

19

ENOTDIR

No es un directorio

20

EISDIR

Es un directorio

21

EINVAL

Argumento no válido

22

ENFILE

Demasiados archivos abiertos en el sistema

23

EMFILE

Demasiados archivos abiertos

24

ENOTTY

Operación de control de E/S incorrecta

25

EFBIG

Archivo demasiado grande

27

ENOSPC

No queda espacio en el dispositivo

28

ESPIPE

Búsqueda no válida

29

EROFS

Sistema de archivos de solo lectura

30

EMLINK

Hay demasiados vínculos

31

EPIPE

Canalización rota

32

EDOM

Argumento matemático

33

ERANGE

El resultado es demasiado grande

34

EDEADLK

Podría ocurrir un bloqueo irreversible del recurso

36

EDEADLOCK

Igual que EDEADLK por compatibilidad con versiones anteriores de Microsoft C

36

ENAMETOOLONG

El nombre de archivo es demasiado largo

38

ENOLCK

No hay bloqueos disponibles

39

ENOSYS

Función no admitida

40

ENOTEMPTY

El directorio no está vacío

41

EILSEQ

Secuencia de bytes no válida

42

STRUNCATE

Se truncó la cadena

80

Requisitos

Macro global

Encabezado necesario

Encabezado opcional

errno

<errno.h> o <stdlib.h>, <cerrno> o <cstdlib> (C++)

_doserrno, _sys_errlist, _sys_nerr

<stdlib.h>, <cstdlib> (C++)

<errno.h>, <cerrno> (C++)

Las macros _doserrno, _sys_errlist y _sys_nerr son extensiones de Microsoft. Para obtener más información de compatibilidad, vea Compatibilidad.

Vea también

Referencia

Variables globales

errno (Constantes)

perror, _wperror

strerror, _strerror, _wcserror, __wcserror

strerror_s, _strerror_s, _wcserror_s, __wcserror_s

_get_doserrno

_set_doserrno

_get_errno

_set_errno