X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=intro.tex;h=5fac07c41c71d9e72a53e92884f299809daa0e63;hb=54d27b07aee6d293931ee274a3ede927f517f2cf;hp=aa39c3db42b7fdffcbc05b2a2e51bd0dd89c216f;hpb=09473ed326013ece27d53cd5ff9f96064cbce9f3;p=gapil.git diff --git a/intro.tex b/intro.tex index aa39c3d..5fac07c 100644 --- a/intro.tex +++ b/intro.tex @@ -201,17 +201,17 @@ esecuzione un programma di interfaccia (che pu terminale o una interfaccia grafica) che mette a disposizione dell'utente un meccanismo con cui questo può impartire comandi o eseguire altri programmi. -Ogni utente appartiene anche ad almeno un gruppo (\textit{group}), ma può -essere associato a più gruppi, questo permette di gestire i permessi di +Ogni utente appartiene anche ad almeno un gruppo (il cosiddetto +\textit{default group}), ma può essere associato ad altri gruppi (i +\textit{supplementary group}), questo permette di gestire i permessi di accesso ai file e quindi anche alle periferiche, in maniera più flessibile, definendo gruppi di lavoro, di accesso a determinate risorse, etc. L'utente e il gruppo sono identificati da due numeri (la cui corrispondenza ad -un nome in espresso in caratteri \`e inserita nei due files -\texttt{/etc/passwd} e \texttt{/etc/groups}). Questi numeri sono -l'\textit{user identifier}, detto in breve \textit{uid} e il \textit{group - identifier}, detto in breve \textit{gid} che sono quelli che identificano -l'utente di fronte al sistema. +un nome in espresso in caratteri è inserita nei due files \file{/etc/passwd} +e \file{/etc/groups}). Questi numeri sono l'\textit{user identifier}, detto +in breve \acr{uid} e il \textit{group identifier}, detto in breve \acr{gid} +che sono quelli che identificano l'utente di fronte al sistema. In questo modo il sistema è in grado di tenere traccia per ogni processo dell'utente a cui appartiene ed impedire ad altri utenti di interferire con @@ -220,10 +220,10 @@ sicurezza interna in quanto anche l'accesso ai file (vedi \secref{sec:file_access_control}) è regolato da questo meccanismo di identificazione. -Un utente speciale del sistema è \textit{root}, il cui uid è zero. Esso +Un utente speciale del sistema è \textit{root}, il cui \acr{uid} è zero. Esso identifica l'amministratore del sistema, che deve essere in grado di fare -qualunque operazione; pertanto per l'utente root i meccanismi di controllo -descritti in precedenza sono disattivati. +qualunque operazione; pertanto per l'utente \textit{root} i meccanismi di +controllo descritti in precedenza sono disattivati. \section{Gli standard di unix e GNU/Linux} @@ -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.