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
sqrt(-1)
ERANGE
strtol("0xfffffffff", NULL, 0)
en sistemes amb una long
de 32 bitsEILSEQ (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]