Archivo de encabezado para programas en C
errno.h es un archivo de encabezado de la biblioteca estándar del lenguaje de programación C. Define macros para informar y recuperar condiciones de error utilizando el símbolo errno
(abreviatura de "número de error"). [1]
errno
errno
actúa como una variable entera. Ciertas funciones de biblioteca almacenan un valor (el número de error) cuando detectan errores. Al iniciar el programa, el valor almacenado es cero. Las funciones de biblioteca almacenan solo valores mayores que cero. Cualquier función de biblioteca puede alterar el valor almacenado antes de regresar, ya sea que detecten errores o no. [2] La mayoría de las funciones indican que detectaron un error al devolver un valor especial, generalmente NULL para funciones que devuelven punteros y -1 para funciones que devuelven números enteros. Algunas funciones requieren que el llamador lo preestablezca errno
en cero y lo pruebe después para ver si se detectó un error.
La errno
macro se expande a un valor lvalue con tipo int
, a veces con los especificadores de tipo extern
y/o volatile
dependiendo de la plataforma. [3] Originalmente, esta era una ubicación de memoria estática, pero hoy en día casi siempre se usan macros para permitir subprocesos múltiples , de modo que cada subproceso vea su propio número de error local del subproceso .
El archivo de encabezado también define macros que se expanden a constantes enteras que representan los códigos de error. La biblioteca estándar de C solo requiere que se definan tres: [2]
Edom
- Resultados de un parámetro fuera del dominio de una función, por ejemplo
sqrt(-1)
ÉRANGE
- Resultados de un resultado fuera del rango de una función, por ejemplo, en sistemas con un ancho de 32 bits.
strtol("0xfffffffff", NULL, 0)
long
EILSEQ (requerido desde 1994, enmienda 1 a la norma C89) [4]
- Resultados de una secuencia de bytes ilegal, por ejemplo en sistemas que utilizan UTF-8 .
mbstowcs(buf, "\xff", 1)
Los sistemas operativos compatibles con POSIX como AIX , Linux o Solaris incluyen muchos otros valores de error, muchos de los cuales se utilizan con mucha más frecuencia que los anteriores, como EACCES para cuando un archivo no se puede abrir para leer. [5] C++11 define además muchos de los mismos valores que se encuentran dentro de la especificación POSIX. [6]
Tradicionalmente, la primera página de los manuales del sistema Unix , llamada intro(2), enumera todas las macros errno.h, pero este no es el caso de Linux , donde estas macros se enumeran en errno(3).
Una cadena errno
puede traducirse a una cadena descriptiva usando strerror (definido en string.h ) o una extensión BSD llamada sys_errlist
. La traducción puede imprimirse directamente en el flujo de error estándar usando perror (definido en stdio.h ). Como strerror
en muchos sistemas tipo Unix no es seguro para subprocesos, strerror_r
se usa una versión segura para subprocesos, pero las definiciones conflictivas de POSIX y GNU la hacen incluso menos portable que la sys_errlist
tabla. [8]
Macros GLIBC
La biblioteca GNU C (GLIBC) proporciona las macros de valores de error POSIX adicionales en el archivo de encabezado errno.h
. [9] Estas son las descripciones de las macros proporcionadas por strerror , excluyendo 41 y 58 ya que no están en el estándar POSIX :
EPERM (1)
- Operación no permitida
ENOENTE (2)
- El fichero o directorio no existe
Investigación científica (3)
- No existe tal proceso
EINTR (4)
- Llamada al sistema interrumpida
OIEA (5)
- Error de entrada/salida
ENXIO (6)
- No existe tal dispositivo o dirección
E2GRANDE (7)
- La lista de argumentos es demasiado larga
EJECUTAR ENO (8)
- Error de formato de ejecución
EBAD (9)
- Descriptor de archivo incorrecto
NIÑO (10)
- Sin procesos secundarios
OTRA VEZ (11)
- Recurso no disponible temporalmente
ENOMENO (12)
- No se puede asignar memoria
EACCES (13)
- Permiso denegado
FALLO (14)
- Mala dirección
ENOTBLK (15)
- Se requiere dispositivo de bloqueo
Busy (16)
- Dispositivo o recurso ocupado
EEXIST (17)
- El archivo existe
EXDEV (18)
- Enlace entre dispositivos no válido
ENODEVO (19)
- No existe tal dispositivo
ENOTDIR (20)
- No es un directorio
Eiddir (21)
- Es un directorio
ENVÍO (22)
- Argumento inválido
ARCHIVO (23)
- Demasiados archivos abiertos en el sistema
ARCHIVO EM (24)
- Demasiados archivos abiertos
ENOTTI (25)
- Ioctl inadecuado para el dispositivo
ETXTBSY (26)
- Archivo de texto ocupado
EFBIG (27)
- El archivo es demasiado grande
Enospc (28)
- No queda espacio en el dispositivo
ESPÍRITU (29)
- Búsqueda ilegal
EROFS (30)
- Sistema de archivos de sólo lectura
Enlace EM (31)
- Demasiados enlaces
EPIPE (32)
- Tubería rota
Edom (33)
- Argumento numérico fuera de dominio
ÉRANGE (34)
- Resultado numérico fuera de rango
EDEADLK (35)
- Se evitó el bloqueo de recursos
ESMALTE DE ACERO (36)
- El nombre del archivo es demasiado largo
ENOLCK (37)
- No hay cerraduras disponibles
ENOSIS (38)
- Función no implementada
ENOTEMPTA (39)
- El directorio no está vacío
ELOOP (40)
- Demasiados niveles de enlaces simbólicos
ENOMSG (42)
- No hay mensaje del tipo deseado
EIDRM (43)
- Identificador eliminado
ECHRNG (44)
- Número de canal fuera de rango
EL2NSYNC (45)
- Nivel 2 no sincronizado
EL3HLT (46)
- Nivel 3 detenido
EL3RST (47)
- Reinicio de nivel 3
ELNRNG (48)
- Número de enlace fuera de rango
EUNAQUE (49)
- Controlador de protocolo no adjunto
ENOCSI (50)
- No hay estructura CSI disponible
EL2HLT (51)
- Nivel 2 detenido
EBADE (52)
- Cambio no válido
EBADR (53)
- Descriptor de solicitud no válido
EXCELENTE (54)
- Cambio completo
ENOANO (55)
- Sin ánodo
EBADRQC (56)
- Código de solicitud no válido
EBADSLT (57)
- Ranura no válida
FUENTE ELECTRÓNICA (59)
- Formato de archivo de fuente incorrecto
ENOSTRO (60)
- El dispositivo no es una transmisión
ENODATA (61)
- No hay datos disponibles
TIEMPO (62)
- El temporizador expiró
ENOSR (63)
- Recursos fuera de streams
ENONET (64)
- La máquina no está en la red
ENOPKG (65)
- Paquete no instalado
REMOTO (66)
- El objeto es remoto
ENLACE (67)
- El enlace ha sido cortado
AEV (68)
- Error de publicidad
ESRMNT (69)
- Error de Srmount
Comercio electrónico (70)
- Error de comunicación al enviar
EPROTO (71)
- Error de protocolo
EMULTIHOP (72)
- Intento de multisalto
Departamento de Transporte de EE. UU . (73)
- Error específico de RFS
EBADMSG (74)
- Mal mensaje
DESBORDAMIENTO (75)
- Valor demasiado grande para el tipo de datos definido
ENOTUNIQ (76)
- Nombre no único en la red
EBADFD (77)
- Descriptor de archivo en mal estado
EREMCHG (78)
- Dirección remota cambiada
ELIBACC (79)
- No se puede acceder a una biblioteca compartida necesaria
ELIBAD (80)
- Cómo acceder a una biblioteca compartida dañada
ELIBSCN (81)
- La sección .lib en a.out está dañada
Elimax (82)
- Intentando vincular demasiadas bibliotecas compartidas
ELIBEXEC (83)
- No se puede ejecutar una biblioteca compartida directamente
SECCION EIL (84)
- Carácter multibyte o ancho no válido o incompleto
ANTERIORIDAD (85)
- La llamada al sistema interrumpida debe reiniciarse
ESTRIPADORA (86)
- Error en la tubería de Streams
USUARIOS (87)
- Demasiados usuarios
ENOTSOCKET (88)
- Operación de socket en no socket
Dirección de correo electrónico de la dirección (89)
- Dirección de destino requerida
TAMAÑO EMS (90)
- El mensaje es demasiado largo
EPROTOTIPO (91)
- Protocolo de tipo incorrecto para socket
ENOPROTOOPTO (92)
- Protocolo no disponible
SOPORTE DE EPROTONOS (93)
- Protocolo no compatible
SOPORTE ESOCKT (94)
- Tipo de socket no compatible
Suministros de emergencia (95)
- Operación no admitida
APOYO EPFNOS (96)
- Familia de protocolos no compatible
SOPORTE EAFNOSUPPORT (97)
- Familia de direcciones no admitida por el protocolo
BEBIDAS ALCOHÓLICAS (98)
- Dirección ya en uso
EADDRNOTAVAIL (99)
- No se puede asignar la dirección solicitada
DESCARGA DE ENET (100)
- La red está caída
ALCANCE EN EL ENET (101)
- La red no es accesible
REINICIO DE ENE (102)
- La conexión a la red se perdió al reiniciar
ECONNABORTADO (103)
- El software provocó la interrupción de la conexión
REINICIO ECONÓMICO (104)
- Conexión restablecida por el par
ENOBUFES (105)
- No hay espacio de búfer disponible
EISCONN (106)
- El punto final de transporte ya está conectado
ENOTCONN (107)
- El punto final de transporte no está conectado
APAGADO (108)
- No se puede enviar después de apagar el punto final de transporte
Referencias etómicas (109)
- Demasiadas referencias: no se pueden unir
TIEMPO DE SALIDA (110)
- Se agotó el tiempo de conexión
ECONNREFUSED (111)
- Conexión rechazada
DESCARGA ELECTRÓNICA (112)
- El host está inactivo
ALCANCE DEL HOSTUN (113)
- No hay ruta al host
YA (114)
- Operación ya en marcha
UN PROGRESO (115)
- Operación ya en curso
ESTADO (116)
- Identificador de archivo obsoleto
EUCLEAN (117)
- La estructura necesita limpieza
ENOTNAM (118)
- No es un archivo de tipo nombrado XENIX
DISPONIBLE (119)
- No hay semáforos XENIX disponibles
HIELO (120)
- Es un archivo de tipo nombrado
EREMOTEIO (121)
- Error de E/S remota
Cita original (122)
- Cuota de disco excedida
ENOMEDIO (123)
- No se encontró ningún medio
TIPO EMEDIO (124)
- Tipo de medio incorrecto
ECANCELADO (125)
- Operación cancelada
ENOKEY (126)
- La clave requerida no está disponible
TECLA ELECTRÓNICA VENCIDA (127)
- La clave ha expirado
LLAVE ELECTRÓNICA REVOCADA (128)
- La clave ha sido revocada
LLAVE ELECTRÓNICA RECHAZADA (129)
- La clave fue rechazada por el servicio
PROPIETARIO MUERTO (130)
- El dueño murió
NO RECUPERABLE (131)
- Estado no recuperable
Matanza de ERF (132)
- Operación no posible debido a RF-kill
VENENO EHW (133)
- La página de memoria tiene un error de hardware
Véase también
Referencias
- ^ Norma internacional para el lenguaje de programación C (C11), ISO/IEC 9899:2011, pág. 205
- ^ Norma internacional para el lenguaje de programación C (C99), ISO/IEC 9899:1999, pág. 186
- ^ "Comprobación de errores". La biblioteca C de GNU (glibc) . Proyecto GNU. 8 de febrero de 2014. Consultado el 25 de junio de 2014 .
- ^ "Breve descripción del Anexo Normativo 1" . Consultado el 12 de septiembre de 2013 .
- ^
errno.h
: números de error del sistema – Referencia de definiciones básicas, La especificación única de UNIX , versión 4 de The Open Group - ^ "Números de error - cppreference.com" . Consultado el 8 de mayo de 2015 .
- ^ McCabe, Colin. "El problema con el terror". www.club.cc.cmu.edu .
- ^ "Códigos de error (La biblioteca C de GNU)". www.gnu.org . Consultado el 21 de octubre de 2023 .
Bibliografía
- Stevens, W. Richard; Rago, Stephen A. (24 de mayo de 2013). Programación avanzada en el entorno UNIX (tercera edición). Addison-Wesley Professional . ISBN 978-0321637734. Recuperado el 27 de febrero de 2015 .
Enlaces externos
intro(2)
– Manual de llamadas al sistema de FreeBSDerrno(3)
– Manual del programador de Linux – Funciones de la biblioteca- Manual de la biblioteca C de GNU: Códigos de error
- Listas de valores errno en Linux, tanto numéricos como simbólicos