Sistemati i riferimenti
[gapil.git] / intro.tex
index ebbc5e2e0920dab23fa340bf4c6350decd677e4d..aa39c3db42b7fdffcbc05b2a2e51bd0dd89c216f 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -217,7 +217,7 @@ In questo modo il sistema 
 dell'utente a cui appartiene ed impedire ad altri utenti di interferire con
 esso. Inoltre con questo sistema viene anche garantita una forma base di
 sicurezza interna in quanto anche l'accesso ai file (vedi
-\secref{sec:filedir_access_control}) è regolato da questo meccanismo di
+\secref{sec:file_access_control}) è regolato da questo meccanismo di
 identificazione.
 
 Un utente speciale del sistema è \textit{root}, il cui uid è zero. Esso
@@ -301,3 +301,49 @@ time viene chiamato \textit{CPU time}.
 \subsection{Tipi di dati primitivi}
 \label{sec:intro_data_types}
 
+\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{modifiable lvalue}, quindi si
+  può anche usare una macro, e questo è infatti il modo usato da Linux per
+  renderla locale ai singoli thread
+}, 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:signals}), ma
+dato che un manipolatore di segnale scritto bene salva e ripristina il valore
+della varibile, di questo non è necessario preoccuparsi nella programmazione
+normale.
+
+I valori che può assumere \var{errno} sono riportati in \capref{cha:errors},
+nell'header \file{errno.h} sono anche definiti i nomi simbolici per le
+costanti numeriche che identificano i vari errori. In seguito faremo sempre
+rifermento a tali valori, quando descriveremo i possibili errori restituiti
+dalle funzioni.
+
+\subsection{Le funzioni \func{strerror} e \func{perror}}
+\label{sec:intro_strerror}
+
+
+