errno.h es un archivo de cabecera 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
actúa como una variable entera. Un valor (el número de error) se almacena en errno
por ciertas funciones de la biblioteca cuando se detectan errores. Al inicio del programa, el valor almacenado es cero. Las funciones de biblioteca almacenan solo valores mayores que cero. Cualquier función de la biblioteca puede alterar el valor almacenado antes de la devolución, ya sea que detecten errores o no. [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 preestablezca errno
a cero y luego la pruebe para ver si se detectó un error.
La errno
macro se expande a un lvalue con type int
, a veces con los especificadores extern
y / o volatile
type dependiendo de la plataforma. [3] Originalmente, esta era una ubicación de memoria estática, pero las macros casi siempre se usan hoy en día para permitir múltiples subprocesos , de modo que cada subproceso verá 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, p. Ej.
sqrt(-1)
BORRAR
- Resultados de un resultado fuera del rango de una función, por ejemplo,
strtol("0xfffffffff",NULL,0)
en sistemas con un ancho de 32 bitslong
EILSEQ (obligatorio desde 1994, enmienda 1 a la norma C89) [4]
- Resulta de una secuencia de bytes ilegal, por ejemplo,
mbstowcs(buf,"\xff", 1)
en sistemas que usan UTF-8 .
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 además define 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 su lugar en errno (3). [7]
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 errores estándar usando perror (definido en stdio.h ). Como strerror
en muchos sistemas similares a Unix no es seguro para subprocesos, strerror_r
se usa una versión segura para subprocesos , pero las definiciones conflictivas de POSIX y GNU lo hacen incluso menos portátil que la sys_errlist
tabla. [8]
Ver también
Referencias
- ^ Norma internacional para el lenguaje de programación C (C11), ISO / IEC 9899: 2011, p. 205
- ^ a b Estándar internacional para el lenguaje de programación C (C99), ISO / IEC 9899: 1999, p. 186
- ^ "Comprobación de 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 .
- ^ especificación única de UNIX , número 7 de The Open Group : números de error del sistema: referencia de definiciones básicas, la
- ^ "Números de error - cppreference.com" . Consultado el 8 de mayo de 2015 .
- ^ Stevens y Rago 2013 , p. 14.
- ^ McCabe, Colin. "El problema del strerror" . www.club.cc.cmu.edu .
Bibliografía
- Stevens, W. Richard; Rago, Stephen A. (24 de mayo de 2013). Programación avanzada en el entorno UNIX (Tercera ed.). Addison-Wesley Professional . ISBN 978-0321637734. Consultado el 27 de febrero de 2015 .
enlaces externos
- - Manual de llamadas al sistema FreeBSD
- - 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