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 |
|
errno |
|
_sys_errlist, _sys_nerr |
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
strerror, _strerror, _wcserror, __wcserror