+Benché gli errori siano identificati univocamente dal valore numerico di
+\var{errno} le librerie provvedono alcune funzioni e variabili utili per
+riportare in opportuni messaggi le condizioni di errore verificatesi. La
+prima funzione che si può usare per ricavare i messaggi di errore è
+\func{strerror}, il cui prototipo è:
+\begin{prototype}{string.h}{char * strerror(int errnum)}
+ La funzione ritorna una stringa (statica) che descrive l'errore il cui
+ codice è passato come parametro.
+\end{prototype}
+
+In generale \func{strerror} viene usata passando \var{errno} come parametro;
+nel caso si specifichi un codice sbagliato verrà restituito un messaggio di
+errore sconosciuto. La funzione utilizza una stringa statica che non deve
+essere modificata dal programma e che è utilizzabile solo fino ad una chiamata
+successiva a \func{strerror}; nel caso si usino i thread è
+provvista\footnote{questa funzione è una estensione GNU, non fa parte dello
+ standard POSIX} una versione apposita:
+\begin{prototype}{string.h}
+{char * strerror\_r(int errnum, char * buff, size\_t size)}
+ La funzione è analoga a \func{strerror} ma ritorna il messaggio in un buffer
+ specificato da \var{buff} di lunghezza massima (compreso il terminatore)
+ \var{size}.
+\end{prototype}
+che utilizza un buffer che il singolo thread deve allocare, per evitare i
+problemi connessi alla condivisione del buffer statico. Infine, per completare
+la caratterizzazione dell'errore, si può usare anche la variabile
+globale\footnote{anche questa è una estensione GNU}
+\var{program\_invocation\_short\_name} che riporta il nome del programma
+attualmente in esecuzione.
+
+Una seconda funzione usata per riportare i codici di errore in maniera
+automatizzata sullo standard error (vedi \secref{sec:file_stdfiles}) è
+\func{perror}, il cui prototipo è:
+\begin{prototype}{stdio.h}{void perror (const char *message)}
+ La funzione stampa il messaggio di errore relativo al valore corrente di
+ \var{errno} sullo standard error; preceduto dalla stringa \var{message}.
+\end{prototype}
+i messaggi di errore stampati sono gli stessi di \func{strerror}, (riportati
+in \capref{cha:errors}), e, usando il valore corrente di \var{errno}, si
+riferiscono all'ultimo errore avvenuto. La stringa specificata con
+\var{message} viene stampato prime del messaggio d'errore, seguita dai due
+punti e da uno spazio, il messaggio è terminato con un a capo.
+
+Il messaggio può essere riportato anche usando altre variabili globali
+dichiarate in \file{errno.h}:
+\begin{verbatim}
+ const char *sys_errlist[];
+ int sys_nerr;
+\end{verbatim}
+la prima contiene i puntatori alle stringhe di errore indicizzati da
+\var{errno}; la seconda esprime il valore più alto per un codice di errore,
+l'utilizzo di questa stringa è sostanzialmente equivalente a quello di
+\func{strerror}.
+
+
+
+
+In \nfig\ si sono riportate le sezioni attinenti del codice del programma
+\cmd{errcode}, che può essere usato per stampare i messaggi di errore e le
+costanti usate per identificare i singoli errori; il sorgente completo del
+programma è allegato nel file \file{ErrCode.c} e contiene pure la gestione
+delle opzioni e tutte le definizioni necessarie ad associare il valore
+numerico alla costante simbolica. In particolare si è riportata
+
+\begin{figure}[!htb]
+ \footnotesize
+ \begin{lstlisting}{}
+
+
+
+ \end{lstlisting}
+ \caption{Codice per la stampa del messaggio di errore standard.}
+ \label{fig:intro_err_mess}
+\end{figure}