X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=intro.tex;h=4442d526fd6050c83b96009a0e245973212064db;hb=cadf0f8e71e639a376e45e560c9c7f8ccf2eca04;hp=cc6dcfa95d96de8bfe176074d29337561cc73807;hpb=34ed932cc43ebd3df23ce3255984bba0301b7231;p=gapil.git diff --git a/intro.tex b/intro.tex index cc6dcfa..4442d52 100644 --- a/intro.tex +++ b/intro.tex @@ -257,7 +257,7 @@ per i tempi all'interno del sistema, chiamati rispettivamente \textit{calendar (eccetto per la piattaforma alpha). Il dato primitivo usato per questo tempo è \func{clock\_t}, inoltre la costante \macro{HZ} restituisce la frequenza di operazione del timer, e corrisponde dunque al numero di tick al secondo - (Posix definisce allo stesso modo la costante \macro{CLK_TCK}); questo + (Posix definisce allo stesso modo la costante \macro{CLK\_TCK}); questo valore può comunque essere ottenuto con \func{sysconf} (vedi \secref{sec:intro_limits}). \end{itemize} @@ -301,3 +301,40 @@ 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{modifible 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: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. + + +