+\section{La gestione degli errori}
+\label{sec:intro_errors}
+
+La gestione degli errori è in genere una materia complessa. Inoltre il modello
+utilizzato dai sistema unix-like è basato sull'architettura a processi, e
+presenta una serie di problemi nel caso lo si debba usare con i thread.
+Esamineremo in questa sezione le sue caratteristiche principali.
+
+
+
+\subsection{La variabile \func{errno}}
+\label{sec:intro_errno}
+
+Quasi tutte le funzioni delle librerie del C sono in grado di individuare e
+riportare condizioni di errore, ed è una buona norma di programmazione
+controllare sempre che le funzioni chiamate si siano concluse correttamente.
+
+In genere le funzioni di libreria usano un valore speciale per indicare che
+c'è stato un errore. Di solito questo valore è -1 o un puntatore nullo o la
+costante \macro{EOF} (a seconda della funzione); ma questo valore segnala solo
+che c'è stato un errore, non il tipo di errore.
+
+Per riportare il tipo di errore il sistema usa la variabile globale
+\var{errno}\footnote{L'uso di una variabile globale può comportare alcuni
+ problemi (ad esempio nel caso dei thread) ma lo standard ISO C consente
+ anche di definire \var{errno} come un \textit{modifible lvalue}, quindi su
+ può anche usare
+
+}, definita nell'header \file{errno.h}, la variabile è in genere
+definita come \var{volatile} dato che può essere cambiata in modo asincrono da
+un segnale (per una descrizione dei segnali si veda \secref{cha:signal}), ma
+dato che un manipolatore di segnale scritto bene salva e ripristina il valore
+della varibile, di questo non è necessario preoccuparsi nella programmazione
+normale.
+
+
+