Errno.h
Tipus | C header file (en) |
---|---|
Part de | C standard library, Biblioteca C POSIX i Biblioteca estàndard de C++ |
Característiques tècniques | |
Plataforma | C standard library |
errno.h és un fitxer de capçalera de la biblioteca estàndard del llenguatge de programació C. Defineix macros per informar i recuperar condicions d'error utilitzant el símbol errno
(abreviatura de "número d'error").
errno
actua com una variable entera. Un valor (el número d'error) s'emmagatzema a errno
per determinades funcions de la biblioteca quan detecten errors. A l'inici del programa, el valor emmagatzemat és zero. Les funcions de biblioteca només emmagatzemen valors superiors a zero. Qualsevol funció de biblioteca pot alterar el valor emmagatzemat abans del retorn, independentment que detecti errors o no. La majoria de les funcions indiquen que van detectar un error retornant un valor especial, normalment NULL per a funcions que retornen punters i -1 per a funcions que retornen nombres enters. Algunes funcions requereixen que la persona que truca preestableixi errno
a zero i el provi després per veure si s'ha detectat un error.
La macro errno
s'expandeix a un lvalue amb el tipus int
, de vegades amb els especificadors de tipus extern
i/o volatile
depenent de la plataforma.[1] Originalment es tractava d'una ubicació de memòria estàtica, però avui dia s'utilitzen gairebé sempre les macros per permetre el multi-threading, de manera que cada fil veurà el seu propi número d'error local del fil.
El fitxer de capçalera també defineix macros que s'expandeixen a constants senceres que representen els codis d'error. La biblioteca estàndard C només requereix que se'n defineixin tres:
EDOM
- Resultats d'un paràmetre fora del domini d'una funció, p. ex.
sqrt(-1)
ERANGE
- Resultats d'un resultat fora de l'interval d'una funció, per exemple,
strtol("0xfffffffff", NULL, 0)
en sistemes amb unalong
de 32 bits
EILSEQ (obligatori des de l'esmena 1 de l'estàndard C89 de 1994) [2]
Resultats d'una seqüència de bytes il·legal, per exemple, mbstowcs(buf, "\xff", 1)
en sistemes que utilitzen UTF-8.
Els sistemes operatius compatibles amb POSIX com AIX, Linux o Solaris inclouen molts altres valors d'error, molts dels quals s'utilitzen molt més sovint que els anteriors, com ara EACCES quan no es pot obrir un fitxer per llegir-lo. C++11 també defineix molts dels mateixos valors que es troben a l'especificació POSIX.[3]
Tradicionalment, la primera pàgina dels manuals del sistema Unix, anomenada intro(2), enumera totes les macros errno.h, però aquest no és el cas de Linux, on aquestes macros s'enumeren a l'errno(3).[4]
Un errno
es pot traduir a una cadena descriptiva utilitzant strerror (definit a string.h) o una extensió BSD anomenada sys_errlist
. La traducció es pot imprimir directament al flux d'error estàndard utilitzant perror (definit a stdio.h). Com que strerror
en molts sistemes semblants a Unix no és segur per a threads, s'utilitza una versió segura per a threads strerror_r
, però les definicions conflictives de POSIX i GNU la fan encara menys portàtil que la taula sys_errlist
.[5]
Referències
[modifica]- ↑ «Checking for Errors» (en anglès). The GNU C Library (glibc). GNU Project, 08-02-2014. [Consulta: 25 juny 2014].
- ↑ «A brief description of Normative Addendum 1» (en anglès). [Consulta: 12 setembre 2013].
- ↑ «Error numbers - cppreference.com». anglès. [Consulta: 8 maig 2015].
- ↑ Stevens i Rago, 2013, p. 14.
- ↑ McCabe, Colin. «The problem with strerror» (en anglès). www.club.cc.cmu.edu.