Archivo de encabezado para programas C
errno.h es un archivo de encabezado en 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
actúa como una variable entera. errno
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 sólo valores mayores que cero. Cualquier función de biblioteca puede alterar el valor almacenado antes del retorno, detecte o no errores. [2] La mayoría de las funciones indican que detectaron un error al devolver un valor especial, normalmente NULL para funciones que devuelven punteros y -1 para funciones que devuelven números enteros. Algunas funciones requieren que la persona que llama se preestablezca errno
en cero y lo pruebe después para ver si se detectó un error.
La errno
macro se expande a un valor l con tipo int
, a veces con los especificadores extern
y/o volatile
tipo 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 de 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 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)
RANGO
- 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 al estándar C89) [4]
- Resulta 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 cuando un archivo no se puede abrir para leerlo. [5] C++11 define además muchos de los mismos valores que se encuentran en la especificación POSIX. [6]
Tradicionalmente, la primera página de los manuales del sistema Unix , denominada intro(2), enumera todas las macros errno.h, pero este no es el caso de Linux , donde estas macros se enumeran en errno(3).
An errno
se puede traducir a una cadena descriptiva usando strerror (definido en string.h ) o una extensión BSD llamada sys_errlist
. La traducción se puede imprimir 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 utiliza una versión segura para subprocesos, pero las definiciones contradictorias de POSIX y GNU lo hacen incluso menos portátil que la sys_errlist
tabla. [8]
Macros GLIBC
La biblioteca GNU C (GLIBC) proporciona 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
ESCR (3)
- No existe tal proceso
EINTR (4)
- Llamada al sistema interrumpida
OIE (5)
- Error de entrada/salida
ENXIO (6)
- No existe tal dispositivo o dirección
E2BIG (7)
- Lista de argumentos demasiado larga
ENOEXEC (8)
- Error de formato ejecutivo
EBADF (9)
- descriptor de archivo incorrecto
NIÑO (10)
- Sin procesos secundarios
OTRA VEZ (11)
- Recurso temporalmente no disponible
ENOMEMA (12)
- No se puede asignar memoria
ACCESO (13)
- Permiso denegado
FALLA (14)
- Mala dirección
ENOTBLK (15)
- Se requiere dispositivo de bloqueo
EBUSY (16)
- Dispositivo o recurso ocupado
EXISTE (17)
- El archivo existe
EXDEV (18)
- Enlace entre dispositivos no válido
ENODEV (19)
- Hay tal dispositivo
ENOTDIR (20)
- No es un directorio
EISDIR (21)
- Es un directorio
EINVAL (22)
- Argumento no válido
ENFILAR (23)
- Demasiados archivos abiertos en el sistema
EMFILE (24)
- Demasiados archivos abiertos
ENOTTY (25)
- Ioctl inapropiado para el dispositivo
ETXTBSY (26)
- Archivo de texto ocupado
EFBIG (27)
- Archivo demasiado grande
ENOSPC (28)
- no queda espacio en el dispositivo
ESPIPE (29)
- búsqueda ilegal
EROFS (30)
- Sistema de archivos de sólo lectura
EMLINK (31)
- Demasiados enlaces
ESPACIO (32)
- Tuberia rota
EDOM (33)
- Argumento numérico fuera de dominio
RANGO (34)
- Resultado numérico fuera de rango
EDEADLK (35)
- Se evitó el estancamiento de recursos
ENAMETOOLONG (36)
- Nombre de archivo demasiado largo
ENOLCA (37)
- No hay cerraduras disponibles
ENÓSYS (38)
- Función no implementada
ENOTEMPIA (39)
- Directorio no 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
EL3 PRIMERO (47)
- Reinicio de nivel 3
ELNRNG (48)
- Número de enlace fuera de rango
EUNATCH (49)
- Controlador de protocolo no adjunto
ENOCSI (50)
- No hay estructura CSI disponible
EL2HLT (51)
- Nivel 2 detenido
EBADE (52)
- Intercambio no válido
EBADR (53)
- Descriptor de solicitud no válido
EXCOMPLETO (54)
- Intercambio completo
ENOANO (55)
- Sin ánodo
EBADRQC (56)
- Código de solicitud no válido
EBADSLT (57)
- Ranura no válida
EBFONT (59)
- Formato de archivo de fuente incorrecto
ENÓSTR (60)
- El dispositivo no es una transmisión
ENODATA (61)
- Datos no disponibles
TIEMPO (62)
- El temporizador expiró
ENOSR (63)
- Recursos fuera de flujos
ENONET (64)
- La máquina no está en la red.
ENOPKG (65)
- Paquete no instalado
EREMOTO (66)
- El objeto es remoto
ENOLINK (67)
- El enlace ha sido cortado.
EADV (68)
- Error de publicidad
ESRMNT (69)
- error de montaje superior
COMM (70)
- Error de comunicación en el envío
EPROTO (71)
- Error de protocolo
EMULTIHOP (72)
- Intento de salto múltiple
EDOTDOT (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)
- Acceder a una biblioteca compartida corrupta
ELIBSCN (81)
- Sección .lib en a.out dañada
ELIBMAX (82)
- Intentar vincular demasiadas bibliotecas compartidas
ELIBEXEC (83)
- No se puede ejecutar una biblioteca compartida directamente
EILSEQ (84)
- Carácter ancho o multibyte no válido o incompleto
EREINICIO (85)
- La llamada al sistema interrumpida debe reiniciarse
ESTRPIPE (86)
- Error de tubería de flujos
USUARIOS (87)
- Demasiados usuarios
ENOTSOCK (88)
- Operación de zócalo sin zócalo
EDESTADDRREQ (89)
- Dirección de destino requerida
TAMAÑO EMSG (90)
- Mensaje demasiado largo
EPROTOTIPO (91)
- Tipo de protocolo incorrecto para el socket
ENOPROTOOPT (92)
- Protocolo no disponible
SOPORTE EPROTONOS (93)
- Protocolo no compatible
ESOCKTNOSAPOYO (94)
- Tipo de enchufe no compatible
EOPNOTSUPP (95)
- Operación no compatible
EPFNOSAPOYO (96)
- Familia de protocolos no compatible
EAFNOSAPOYO (97)
- Familia de direcciones no admitida por el protocolo
EADDRINUSE (98)
- Dirección ya en uso
EADDRNOTAVAIL (99)
- No se puede asignar la dirección solicitada
ENETDOWN (100)
- La red está caída
ENETUNREACH (101)
- La red es inalcanzable
ENTRESET (102)
- Conexión de red interrumpida al restablecer
ECONNABORTADOS (103)
- el software causó falla de conexión
REINICIO ECONÓMICO (104)
- Restablecimiento de la conexión por parte del par
ENOBUFES (105)
- No hay espacio de buffer 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 del cierre del punto final de transporte
ETOOMANYREFS (109)
- Demasiadas referencias: no se puede empalmar
TIEMPO FUERA (110)
- Tiempo de conexión agotado
ECONNREGADO (111)
- conexión denegada
EHOSTDOWN (112)
- El anfitrión no funciona
EHOSTUNREACH (113)
- No hay ruta para hospedar
YA YA (114)
- Operación ya en marcha
EINPROGRESO (115)
- Operación ahora en progreso
ESTATAL (116)
- Identificador de archivo obsoleto
EUCLEAN (117)
- La estructura necesita limpieza
ENOTNAM (118)
- No es un archivo de tipo con nombre XENIX
DISPONIBLE (119)
- No hay semáforos XENIX disponibles
EISNAM (120)
- Es un archivo de tipo con nombre
EREMOTEIO (121)
- Error de E/S remota
EDQUOT (122)
- Ha excedido la cuota de disco
ENOMEDIO (123)
- No se encontró ningún medio
TIPO MEDIO (124)
- Tipo de medio incorrecto
ECANCELADO (125)
- Operación cancelada
ENOCÍA (126)
- La clave requerida no está disponible
EKEYEXPIRADA (127)
- La clave ha caducado
EKEYREVOCADO (128)
- La clave ha sido revocada
EKEYRECHAZADO (129)
- La clave fue rechazada por el servicio.
PROPIETARIO MUERTO (130)
- El dueño murió
ENOTRECUPABLE (131)
- Estado no recuperable
ERFKILL (132)
- Operación no posible debido a RF-kill
EHWVENENO (133)
- La página de memoria tiene un error de hardware
Ver también
Referencias
- ^ Estándar internacional para el lenguaje de programación C (C11), ISO/IEC 9899:2011, p. 205
- ^ ab Estándar internacional para el lenguaje de programación C (C99), ISO/IEC 9899:1999, p. 186
- ^ "Buscar errores". La biblioteca GNU C (glibc) . Proyecto GNU. 2014-02-08 . Consultado el 25 de junio de 2014 .
- ^ "Una 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, 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 del strerror". www.club.cc.cmu.edu .
- ^ "Códigos de error (la biblioteca GNU C)". www.gnu.org . Consultado el 21 de octubre de 2023 .
Bibliografía
enlaces externos
intro(2)
– Manual de llamadas al sistema FreeBSDerrno(3)
– Manual del programador de Linux – Funciones de biblioteca- Manual de la biblioteca GNU C: códigos de error
- Listas de valores de errno en Linux, tanto numéricos como simbólicos