X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=5fac07c41c71d9e72a53e92884f299809daa0e63;hp=13a5f4a7eff9bbecf2af8456b202c862f3e886cd;hb=eeb51cd82a56668eff7439a1e7d397e106463cc8;hpb=e65d10df4612dc4c8805b1beb7bef5e82e0a2b9a diff --git a/intro.tex b/intro.tex index 13a5f4a..5fac07c 100644 --- a/intro.tex +++ b/intro.tex @@ -301,6 +301,9 @@ 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} @@ -310,7 +313,6 @@ 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} @@ -328,22 +330,35 @@ Per riportare il tipo di errore il sistema usa la variabile globale 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. + 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 variabile, 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. +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. + +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 +valore diverso da zero in caso di errore. Si tenga presente che le funzioni +non cambiano il valore di \var{errno} quando hanno successo, pertanto un +valore non nullo non è sintomo di errore (potrebbe essere il risultato di un +errore precedente) e non si può usare \var{errno} per determinare +\textsl{quando} una chiamata a funzione è fallita. Pertanto la procedura da +seguire è quella di controllare \var{errno} immediatamente dopo il fallimento +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.