errno.h

libreria standard del C
(Reindirizzamento da Errno)
Libreria standard del C++
Libreria standard del C

errno.h è un header file della libreria standard del linguaggio di programmazione C che contiene definizioni di macro per ottenere informazioni sulle condizioni in cui si verificano degli errori. Ciò avviene mediante l'utilizzo della variabile errno (abbreviazione inglese di "error number").

errno agisce come variabile globale intera definita da errno.h. Un valore (il numero dell'errore) è memorizzato in errno da certe funzioni di libreria quando individuano un errore per segnalare specifiche situazioni. All'avvio del programma, tale valore viene impostato a 0 ed è garantito che nessuna funzione di libreria lo azzeri. Le funzioni di libreria memorizzano solamente valori maggiori di 0. Qualsiasi funzione di libreria può modificare a piacimento errno prima di ritornare, sia che si sia verificato un errore, sia altrimenti.[1] Alcune funzioni richiedono che sia il chiamante a pre-impostare errno a zero. La maggior parte delle funzioni di libreria segnalano un errore ritornando specifici valori, tipicamente NULL per funzioni ritornanti i puntatori, e -1 per funzioni che ritornano interi. È buona prassi azzerare errno prima di chiamare funzioni di libreria, controllare il loro valore di ritorno subito dopo averle chiamate e qualora fosse presente uno dei valori appena citati, gestire opportunamente l'errore impostato dal chiamato in errno.h. In caso di errori presente in chiamate di funzioni successive, il precedente errore salvato verrà sovrascritto.

errno macro si espande in un lvalue con tipo int, qualche volta con extern e/o volatile a seconda della piattaforma.[2] Originariamente questa era una zona di memoria statica, ma la maggioranza delle macro, oggi, sono utilizzate in contesti multi-threaded, quindi ogni thread avrà il suo errno nel thread stack.

Il file di header definisce anche macro che si espandono a interi costanti che rappresentano I codici di errore. La libreria standard del C richiede solamente che i seguenti tre siano definiti:[1]

Nome Descrizione
EDOM Costante intera positiva che indica un errore di dominio di una funzione, come in sqrt(-1).
EILSEQ Costante intera positiva che indica una sequenza illegale di byte su sistemi che usano UTF-8.
ERANGE Costante intera positiva che indica un risultato troppo grande o piccolo e pertanto non rappresentabile sulla microarchitettura corrente.

Altri sistemi operativi (abbreviato in SO, in inglese OS) conformi a POSIX, come Unix o Linux, potrebbero includere altre macro per rappresentare ulteriori situazioni di errore (vedere anche i collegamenti esterni), spesso più comuni delle precedenti. Un esempio è EACCES che si verifica quando un file non può essere aperto in lettura.

Il 19 dicembre 2003, lo SCO Group citò in giudizio svariate aziende (incluse in Fortune 1000 e Global 500) ritenendo che parti del kernel di Unix, tra cui il file errno.h, fossero state illecitamente riprodotte nei sorgenti di Linux. Linus Torvalds, il creatore e detentore del marchio registrato Linux, ha negato le pretese della SCO, affermando di aver scritto di proprio pugno il codice in questione.

Tradizionalmente, la prima pagina del manuale di sistema Unix, chiamata intro(2), elenca tutte le errno.h macro, ma questo non è il caso di Linux, dove queste macro sono invece elencate in errno(3).

Un valore errno può essere tradotto in una stringa descrittiva usando sterror, (definita in string.h). Tale traduzione può essere stampata direttamente sullo stderr con perror (definita in stdio.h). Come strerror in alcuni sistemi Unix-like non è thread-safe, una versione che lo è strerror_r viene utilizzata, ma con definizione contrastanti tra POSIX e GNU la rendono meno portabile.[3]

  1. ^ a b International Standard for Programming Language C (C99), ISO/IEC 9899:1999, p. 186
  2. ^ Checking for Errors, su The GNU C Library (glibc), GNU Project, 8 febbraio 2014. URL consultato il 25 giugno 2014.
  3. ^ Colin McCabe, The problem with strerror, su club.cc.cmu.edu.

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica