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. 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 una long de 32 bits
EILSEQ (obligatori des de l'esmena 1 de l'estàndard C89 de 1994)
Resultats d'una seqüència de bytes il·legal, per exemple, 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.
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).
Un es pot traduir a una cadena descriptiva utilitzant strerror (definit a string.h) o una extensió BSD anomenada . La traducció es pot imprimir directament al flux d'error estàndard utilitzant perror (definit a stdio.h). Com que en molts sistemes semblants a Unix no és segur per a threads, s'utilitza una versió segura per a threads , però les definicions conflictives de POSIX i GNU la fan encara menys portàtil que la taula .
Referències
Categoria:Llenguatge de programació C