Aggiunte note sugli errori
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 10 Sep 2001 17:45:08 +0000 (17:45 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 10 Sep 2001 17:45:08 +0000 (17:45 +0000)
intro.tex

index 5fac07c41c71d9e72a53e92884f299809daa0e63..cdc19e16842236569f6023dd7d61281dcc903a98 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -342,7 +342,8 @@ nell'header \file{errno.h} sono anche definiti i nomi simbolici per le
 costanti numeriche che identificano i vari errori; essi iniziano tutti per
 \macro{E} e si possono considerare come nomi riservati. In seguito faremo
 sempre rifermento a tali valori, quando descriveremo i possibili errori
-restituiti dalle funzioni.
+restituiti dalle funzioni. Il programma di esempio \cmd{errcode} stampa il
+codice relativo ad un valore numerico con l'opzione \cmd{-l}.
 
 Il valore di \var{errno} viene sempre settato a zero all'avvio di un
 programma, gran parte delle funzioni di libreria settano \var{errno} ad un
@@ -358,7 +359,58 @@ della chiamata.
 \subsection{Le funzioni \func{strerror} e \func{perror}}
 \label{sec:intro_strerror}
 
-Benché gli errori siano identificati univocamente dal valore di \var{errno} le
-librerie provvedono alcune funzioni e variabili utili per riportare in
-opportuni messaggi le condizioni di errore verificatesi. 
-
+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à restituita un messaggio di
+errore sconosciuto.
+
+Il problema con \func{strerror} è che 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
+\var{program_invocation_short_name} che riporta il nome del programma
+attualmente in esecuzione.
+
+
+Una seconda funzione usata per riportare i codici di errore è \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 sono gli stessi di \func{strerror}, riportati in
+\capref{cha:errors},
+
+
+Il codice del programma \cmd{errcode} è riportato in \nfig, le sezioni che
+illustrano l'utilizzo delle due funzioni suddette s
+
+\begin{figure}[!htb]
+  \footnotesize
+  \begin{lstlisting}{}
+
+
+
+  \end{lstlisting}
+  \caption{Codice per la stampa del messaggio di errore standard.}
+  \label{fig:proc_fork_code}
+\end{figure}