Errno.h

De la Viquipèdia, l'enciclopèdia lliure
errno.h

TipusC header file (en) Tradueix Modifica el valor a Wikidata
Part deC standard library, Biblioteca C POSIX i Biblioteca estàndard de C++ Modifica el valor a Wikidata
Característiques tècniques
PlataformaC 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 una long 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]

  1. «Checking for Errors» (en anglès). The GNU C Library (glibc). GNU Project, 08-02-2014. [Consulta: 25 juny 2014].
  2. «A brief description of Normative Addendum 1» (en anglès). [Consulta: 12 setembre 2013].
  3. «Error numbers - cppreference.com». anglès. [Consulta: 8 maig 2015].
  4. Stevens i Rago, 2013, p. 14.
  5. McCabe, Colin. «The problem with strerror» (en anglès). www.club.cc.cmu.edu.