Fatte mq_open, mq_close, mq_unlink, mq_setattr, mq_getaddr.
[gapil.git] / system.tex
index ec2f1b6a14fc0df116a0c36bc1fddfc5fc52616e..a8174dbe2a0649c0377406baed13076c76df14e9 100644 (file)
@@ -8,7 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
-\chapter{La gestione del sistema, delle risorse, e degli errori}
+\chapter{La gestione del sistema, del tempo e degli errori}
 \label{cha:system}
 
 In questo capitolo tratteremo varie interfacce che attengono agli aspetti più
@@ -292,7 +292,7 @@ Come accennato in \secref{sec:sys_limits} quando uno dei limiti o delle
 caratteristiche del sistema può variare, per non dover essere costretti a
 ricompilare un programma tutte le volte che si cambiano le opzioni con cui è
 compilato il kernel, o alcuni dei parametri modificabili a run time, è
-necessario ottenerne il valore attraverso la funzione \func{sysconf}. Il
+necessario ottenerne il valore attraverso la funzione \funcd{sysconf}. Il
 prototipo di questa funzione è:
 \begin{prototype}{unistd.h}{long sysconf(int name)}
   Restituisce il valore del parametro di sistema \param{name}.
@@ -464,7 +464,7 @@ In generale i limiti per i file sono molto pi
 rispetto ai limiti generali del sistema; ad esempio parametri come la
 lunghezza del nome del file o il numero di link possono variare da filesystem
 a filesystem; per questo motivo questi limiti devono essere sempre controllati
-con la funzione \func{pathconf}, il cui prototipo è:
+con la funzione \funcd{pathconf}, il cui prototipo è:
 \begin{prototype}{unistd.h}{long pathconf(char *path, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{path}.
   
@@ -476,7 +476,7 @@ con la funzione \func{pathconf}, il cui prototipo 
 E si noti come la funzione in questo caso richieda un parametro che specifichi
 a quale file si fa riferimento, dato che il valore del limite cercato può
 variare a seconda del filesystem. Una seconda versione della funzione,
-\func{fpathconf}, opera su un file descriptor invece che su un pathname. Il
+\funcd{fpathconf}, opera su un file descriptor invece che su un pathname. Il
 suo prototipo è:
 \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{fd}.
@@ -492,8 +492,8 @@ suo prototipo 
 \label{sec:sys_uname}
 
 Un'altra funzione che si può utilizzare per raccogliere informazioni sia
-riguardo al sistema che al computer su cui esso sta girando è \func{uname}; il
-suo prototipo è:
+riguardo al sistema che al computer su cui esso sta girando è \funcd{uname};
+il suo prototipo è:
 \begin{prototype}{sys/utsname.h}{int uname(struct utsname *info)}
   Restituisce informazioni sul sistema nella struttura \param{info}.
   
@@ -535,21 +535,21 @@ struct utsname {
   \end{lstlisting}
   \end{minipage}
   \normalsize 
-  \caption{La struttura \var{utsname}.} 
+  \caption{La struttura \structd{utsname}.} 
   \label{fig:sys_utsname}
 \end{figure}
 
 In generale si tenga presente che le dimensioni delle stringe di una
-\var{utsname} non è specificata, e che esse sono sempre terminate con
-\val{null}; il manuale delle \acr{glibc} indica due diverse dimensioni,
+\struct{utsname} non è specificata, e che esse sono sempre terminate con NUL;
+il manuale delle \acr{glibc} indica due diverse dimensioni,
 \const{\_UTSNAME\_LENGTH} per i campi standard e
 \const{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio;
 altri sistemi usano nomi diversi come \const{SYS\_NMLN} o \const{\_SYS\_NMLN}
 o \const{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux
-\func{uname} corrisponde in realtà a 3 system call diverse, le prime due usano
-rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la terza usa
-anch'essa 65 byte, ma restituisce anche l'ultimo campo, \var{domainname}, con
-una lunghezza di 257 byte.}
+  \func{uname} corrisponde in realtà a 3 system call diverse, le prime due
+  usano rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la
+  terza usa anch'essa 65 byte, ma restituisce anche l'ultimo campo,
+  \var{domainname}, con una lunghezza di 257 byte.}
 
 
 \section{Opzioni e configurazione del sistema}
@@ -575,7 +575,7 @@ sistema, come quelle per la gestione dei filesystem e di utenti e gruppi.
 \label{sec:sys_sysctl}
 
 La funzione che permette la lettura ed l'impostazione dei parametri del
-sistema è \func{sysctl}; è una funzione derivata da BSD4.4, ma
+sistema è \funcd{sysctl}; è una funzione derivata da BSD4.4, ma
 l'implementazione è specifica di Linux; il suo prototipo è:
 \begin{functions}
 \headdecl{unistd.h}
@@ -639,14 +639,14 @@ sistema) e in genere i loro nomi possono variare da una versione di kernel
 all'altra; per questo è sempre il caso di evitare l'uso di \func{sysctl}
 quando esistono modalità alternative per ottenere le stesse informazioni.
 Alcuni esempi di parametri ottenibili sono:
-\begin{itemize*}
+\begin{itemize}
 \item il nome di dominio
 \item i parametri del meccanismo di \textit{paging}.
 \item il filesystem montato come radice
 \item la data di compilazione del kernel
 \item i parametri dello stack TCP
 \item il numero massimo di file aperti
-\end{itemize*}
+\end{itemize}
 
 Come accennato in Linux si ha una modalità alternativa per accedere alle
 stesse informazioni di \func{sysctl} attraverso l'uso del filesystem
@@ -685,8 +685,8 @@ Come accennato in \secref{sec:file_organization} per poter accedere ai file
 occorre prima rendere disponibile al sistema il filesystem su cui essi sono
 memorizzati; l'operazione di attivazione del filesystem è chiamata
 \textsl{montaggio}, per far questo in Linux\footnote{la funzione è specifica
-  di Linux e non è portabile.} si usa la funzione \func{mount} il cui prototipo
-è:
+  di Linux e non è portabile.} si usa la funzione \funcd{mount} il cui
+prototipo è:
 \begin{prototype}{sys/mount.h}
 {mount(const char *source, const char *target, const char *filesystemtype, 
   unsigned long mountflags, const void *data)}
@@ -813,7 +813,7 @@ specificate dagli altri bit), anche in questo caso il valore di \param{source}
 viene ignorato.
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
-\textsl{smontarlo} usando la funzione \func{umount}, il cui prototipo è:
+\textsl{smontarlo} usando la funzione \funcd{umount}, il cui prototipo è:
 \begin{prototype}{sys/mount.h}{umount(const char *target)}
   
   Smonta il filesystem montato sulla directory \param{target}.
@@ -843,7 +843,7 @@ filesystem, se questo contiene la directory di lavoro corrente di un qualunque
 processo o il mount point di un altro filesystem; in questo caso l'errore
 restituito è \errcode{EBUSY}.
 
-Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni
+Linux provvede inoltre una seconda funzione, \funcd{umount2}, che in alcuni
 casi permette di forzare lo smontaggio di un filesystem, anche quando questo
 risulti occupato; il suo prototipo è:
 \begin{prototype}{sys/mount.h}{umount2(const char *target, int flags)}
@@ -863,7 +863,7 @@ viene eseguita una sincronizzazione dei dati.
 Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
   ma con una struttura diversa.} utili per ottenere in maniera diretta
 informazioni riguardo al filesystem su cui si trova un certo file, sono
-\func{statfs} e \func{fstatfs}, i cui prototipi sono:
+\funcd{statfs} e \funcd{fstatfs}, i cui prototipi sono:
 \begin{functions}
   \headdecl{sys/vfs.h} 
   \funcdecl{int statfs(const char *path, struct statfs *buf)} 
@@ -886,12 +886,12 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono
 
 Queste funzioni permettono di ottenere una serie di informazioni generali
 riguardo al filesystem su cui si trova il file specificato; queste vengono
-restituite una struttura \param{buf} di tipo \type{statfs} definita come in
-\figref{fig:sys_statfs}, ed i campi che sono indefiniti per il filesystem in
-esame sono impostati a zero.  I valori del campo \var{f\_type} sono definiti
-per i vari filesystem nei relativi file di header dei sorgenti del kernel da
-costanti del tipo \var{XXX\_SUPER\_MAGIC}, dove \var{XXX} in genere è il
-nome del filesystem stesso.
+restituite all'indirizzo \param{buf} di una struttura \struct{statfs} definita
+come in \figref{fig:sys_statfs}, ed i campi che sono indefiniti per il
+filesystem in esame sono impostati a zero.  I valori del campo \var{f\_type}
+sono definiti per i vari filesystem nei relativi file di header dei sorgenti
+del kernel da costanti del tipo \var{XXX\_SUPER\_MAGIC}, dove \var{XXX} in
+genere è il nome del filesystem stesso.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -912,18 +912,18 @@ struct statfs {
 \end{lstlisting}
   \end{minipage}
   \normalsize 
-  \caption{La struttura \var{statfs}.} 
+  \caption{La struttura \structd{statfs}.} 
   \label{fig:sys_statfs}
 \end{figure}
 
 
 Le \acr{glibc} provvedono infine una serie di funzioni per la gestione dei due
-file \file{/etc/fstab} ed \file{/etc/mtab}, che convenzionalmente sono usati in
-quasi tutti i sistemi unix-like per mantenere rispettivamente le informazioni
-riguardo ai filesystem da montare e a quelli correntemente montati. Le
-funzioni servono a leggere il contenuto di questi file in opportune strutture
-\var{struct fstab} e \var{struct mntent}, e, per \file{/etc/mtab} per inserire
-e rimuovere le voci presenti nel file.
+file \file{/etc/fstab} ed \file{/etc/mtab}, che convenzionalmente sono usati
+in quasi tutti i sistemi unix-like per mantenere rispettivamente le
+informazioni riguardo ai filesystem da montare e a quelli correntemente
+montati. Le funzioni servono a leggere il contenuto di questi file in
+opportune strutture \struct{fstab} e \struct{mntent}, e, per \file{/etc/mtab}
+per inserire e rimuovere le voci presenti nel file.
 
 In generale si dovrebbero usare queste funzioni (in particolare quelle
 relative a \file{/etc/mtab}), quando si debba scrivere un programma che
@@ -956,7 +956,7 @@ citati, il cui formato 
 \cmd{man 5 passwd} e \cmd{man 5 group}).
 
 Per leggere le informazioni relative ad un utente si possono usare due
-funzioni, \func{getpwuid} e \func{getpwnam}, i cui prototipi sono:
+funzioni, \funcd{getpwuid} e \funcd{getpwnam}, i cui prototipi sono:
 \begin{functions}
   \headdecl{pwd.h} 
   \headdecl{sys/types.h} 
@@ -967,7 +967,7 @@ funzioni, \func{getpwuid} e \func{getpwnam}, i cui prototipi sono:
   Restituiscono le informazioni relative all'utente specificato.
   
   \bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le
-    informazioni in caso di successo e \val{null} nel caso non sia stato
+    informazioni in caso di successo e \val{NULL} nel caso non sia stato
     trovato nessun utente corrispondente a quanto specificato.}
 \end{functions}
 
@@ -975,7 +975,7 @@ Le due funzioni forniscono le informazioni memorizzate nel database degli
 utenti (che nelle versioni più recenti possono essere ottenute attraverso PAM)
 relative all'utente specificato attraverso il suo \acr{uid} o il nome di
 login. Entrambe le funzioni restituiscono un puntatore ad una struttura di
-tipo \type{passwd} la cui definizione (anch'essa eseguita in \file{pwd.h}) è
+tipo \struct{passwd} la cui definizione (anch'essa eseguita in \file{pwd.h}) è
 riportata in \figref{fig:sys_passwd_struct}, dove è pure brevemente illustrato
 il significato dei vari campi. 
 
@@ -996,8 +996,8 @@ struct passwd {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{passwd} contenente le informazioni relative ad un
-    utente del sistema.}
+  \caption{La struttura \structd{passwd} contenente le informazioni relative ad
+    un utente del sistema.}
   \label{fig:sys_passwd_struct}
 \end{figure}
 
@@ -1026,18 +1026,18 @@ essere rientranti, per cui ne esistono anche due versioni alternative
 
 In questo caso l'uso è molto più complesso, in quanto bisogna prima allocare
 la memoria necessaria a contenere le informazioni. In particolare i valori
-della struttura \var{passwd} saranno restituiti all'indirizzo \param{password}
-mentre la memoria allocata all'indirizzo \param{buffer}, per un massimo di
-\param{buflen} byte, sarà utilizzata per contenere le stringhe puntate dai
-campi di \param{password}. Infine all'indirizzo puntato da \param{result}
-viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
-l'utente esista, o \val{null} altrimenti.  Qualora i dati non possano essere
-contenuti nei byte specificati da \param{buflen}, la funzione fallirà
-restituendo \errcode{ERANGE} (e \param{result} sarà comunque impostato a
-\val{null}).
-
-Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e
-\func{getgrgid} (e le relative analoghe rientranti con la stessa estensione
+della struttura \struct{passwd} saranno restituiti all'indirizzo
+\param{password} mentre la memoria allocata all'indirizzo \param{buffer}, per
+un massimo di \param{buflen} byte, sarà utilizzata per contenere le stringhe
+puntate dai campi di \param{password}. Infine all'indirizzo puntato da
+\param{result} viene restituito il puntatore ai dati ottenuti, cioè
+\param{buffer} nel caso l'utente esista, o \val{NULL} altrimenti.  Qualora i
+dati non possano essere contenuti nei byte specificati da \param{buflen}, la
+funzione fallirà restituendo \errcode{ERANGE} (e \param{result} sarà comunque
+impostato a \val{NULL}).
+
+Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
+\funcd{getgrgid} (e le relative analoghe rientranti con la stessa estensione
 \code{\_r}) che permettono di leggere le informazioni relative ai gruppi, i
 loro prototipi sono:
 \begin{functions}
@@ -1063,7 +1063,8 @@ loro prototipi sono:
 Il comportamento di tutte queste funzioni è assolutamente identico alle
 precedenti che leggono le informazioni sugli utenti, l'unica differenza è che
 in questo caso le informazioni vengono restituite in una struttura di tipo
-\type{group}, la cui definizione è riportata in \figref{fig:sys_group_struct}.
+\struct{group}, la cui definizione è riportata in
+\figref{fig:sys_group_struct}.
 
 \begin{figure}[!htb]
   \footnotesize
@@ -1079,8 +1080,8 @@ struct group {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{group} contenente le informazioni relative ad un
-    gruppo del sistema.}
+  \caption{La struttura \structd{group} contenente le informazioni relative ad
+    un gruppo del sistema.}
   \label{fig:sys_group_struct}
 \end{figure}
 
@@ -1174,7 +1175,7 @@ libreria. Queste sono analoghe alle precedenti (vedi
 solo che in questo caso la struttura del database di accounting è molto più
 complessa, dato che contiene diversi tipi di informazione.
 
-Le prime tre funzioni, \func{setutent}, \func{endutent} e \func{utmpname}
+Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname}
 servono rispettivamente a aprire e a chiudere il file che contiene il
 database, e a specificare su quale file esso viene mantenuto. I loro prototipi
 sono:
@@ -1206,8 +1207,8 @@ corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in
 precedenza.
 
 Una volta aperto il file si può eseguire una scansione leggendo o scrivendo
-una voce con le funzioni \func{getutent}, \func{getutid}, \func{getutline} e 
-\func{pututline}, i cui prototipi sono:
+una voce con le funzioni \funcd{getutent}, \funcd{getutid}, \funcd{getutline}
+e \funcd{pututline}, i cui prototipi sono:
 \begin{functions}
   \headdecl{utmp.h} 
 
@@ -1223,12 +1224,12 @@ una voce con le funzioni \func{getutent}, \func{getutid}, \func{getutline} e
 
   \funcdecl{struct utmp *pututline(struct utmp *ut)} 
   Scrive una voce nel database.
-
-  \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
-    caso di successo e \val{null} in caso di errore.}
+  
+  \bodydesc{Le funzioni ritornano il puntatore ad una struttura \struct{utmp}
+    in caso di successo e \val{NULL} in caso di errore.}
 \end{functions}
 
-Tutte queste funzioni fanno riferimento ad una struttura di tipo \var{utmp},
+Tutte queste funzioni fanno riferimento ad una struttura di tipo \struct{utmp},
 la cui definizione in Linux è riportata in \secref{fig:sys_utmp_struct}. Le
 prime tre funzioni servono per leggere una voce dal database; \func{getutent}
 legge semplicemente la prima voce disponibile; le altre due permettono di
@@ -1257,8 +1258,8 @@ struct utmp
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{utmp} contenente le informazioni di una voce del
-    database di \textit{accounting}.}
+  \caption{La struttura \structd{utmp} contenente le informazioni di una voce
+    del database di \textit{accounting}.}
   \label{fig:sys_utmp_struct}
 \end{figure}
 
@@ -1331,7 +1332,7 @@ il risultato all'indirizzo specificato dal primo argomento aggiuntivo (di tipo
   **result)} viene usato per restituire il puntatore allo stesso buffer.
 
 Infine le \acr{glibc} forniscono come estensione per la scrittura delle voci
-in \file{wmtp} altre due funzioni, \func{updwtmp} e \func{logwtmp}, i cui
+in \file{wmtp} altre due funzioni, \funcd{updwtmp} e \funcd{logwtmp}, i cui
 prototipi sono:
 \begin{functions}
   \headdecl{utmp.h} 
@@ -1342,13 +1343,13 @@ prototipi sono:
   \funcdecl{void logwtmp(const char *line, const char *name, const char
     *host)} Aggiunge nel database di accounting una voce con i valori
   specificati.
-
-  \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
-    caso di successo e \val{null} in caso di errore.}
+  
+  \bodydesc{Le funzioni ritornano il puntatore ad una struttura \struct{utmp}
+    in caso di successo e \val{NULL} in caso di errore.}
 \end{functions}
 
 La prima funzione permette l'aggiunta di una voce a \file{wmtp} specificando
-direttamente una struttura \type{utmp}, mentre la seconda utilizza gli
+direttamente una struttura \struct{utmp}, mentre la seconda utilizza gli
 argomenti \param{line}, \param{name} e \param{host} per costruire la voce che
 poi aggiunge chiamando \func{updwtmp}.
 
@@ -1369,7 +1370,7 @@ permettono di imporre a ciascuno di essi vincoli e limiti di utilizzo.
 
 Come abbiamo accennato in \secref{sec:proc_wait4} le informazioni riguardo
 l'utilizzo delle risorse da parte di un processo è mantenuto in una struttura
-di tipo \code{struct }\type{rusage}, la cui definizione (che si trova in
+di tipo \struct{rusage}, la cui definizione (che si trova in
 \file{sys/resource.h}) è riportata in \figref{fig:sys_rusage_struct}.
 
 \begin{figure}[!htb]
@@ -1398,17 +1399,17 @@ struct rusage {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{rusage} per la lettura delle informazioni dei 
+  \caption{La struttura \structd{rusage} per la lettura delle informazioni dei 
     delle risorse usate da un processo.}
   \label{fig:sys_rusage_struct}
 \end{figure}
 
-La struttura è ripresa da BSD 4.3, ma attualmente (con i kernel della serie
-2.4.x) i soli campi che sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime},
-\var{ru\_minflt}, \var{ru\_majflt}, e \var{ru\_nswap}. I primi due indicano
-rispettivamente il tempo impiegato dal processo nell'eseguire le istruzioni in
-user space, e quello impiegato dal kernel nelle system call eseguite per conto
-del processo.
+La definizione della struttura in \figref{fig:sys_rusage_struct} è ripresa da
+BSD 4.3, ma attualmente (con i kernel della serie 2.4.x) i soli campi che sono
+mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, \var{ru\_minflt},
+\var{ru\_majflt}, e \var{ru\_nswap}. I primi due indicano rispettivamente il
+tempo impiegato dal processo nell'eseguire le istruzioni in user space, e
+quello impiegato dal kernel nelle system call eseguite per conto del processo.
 
 Gli altri tre campi servono a quantificare l'uso della memoria
 virtuale\index{memoria virtuale} e corrispondono rispettivamente al numero di
@@ -1418,16 +1419,17 @@ quelli che invece han richiesto I/O (detti invece \textit{major page fault})
 ed al numero di volte che il processo è stato completamente tolto dalla
 memoria per essere inserito nello swap.
 
-In genere includere esplicitamente \file{<sys/time.h>} non è più necessario,
-ma aumenta la portabilità, e serve comunque quando, come nella maggior parte
-dei casi, si debba accedere ai campi di \var{rusage} relativi ai tempi di
-utilizzo del processore, che sono definiti come \code{struct }\type{timeval}.
+In genere includere esplicitamente \file{<sys/time.h>} non è più strettamente
+necessario, ma aumenta la portabilità, e serve comunque quando, come nella
+maggior parte dei casi, si debba accedere ai campi di \struct{rusage} relativi
+ai tempi di utilizzo del processore, che sono definiti come strutture
+\struct{timeval}.
 
-
-Questa è la stessa struttura utilizzata da \func{wait4}  per ricavare la
-quantità di risorse impiegato dal processo di cui si è letto lo stato di
-terminazione, ma essa può anche essere letta direttamente utilizzando la
-funzione \func{getrusage}, il cui prototipo è:
+Questa è la stessa struttura utilizzata da \func{wait4} (si ricordi quando
+visto in \secref{sec:proc_wait4}) per ricavare la quantità di risorse
+impiegate dal processo di cui si è letto lo stato di terminazione, ma essa può
+anche essere letta direttamente utilizzando la funzione \funcd{getrusage}, il
+cui prototipo è:
 \begin{functions}
   \headdecl{sys/time.h} 
   \headdecl{sys/resource.h} 
@@ -1463,7 +1465,7 @@ In generale il primo viene chiamato un limite \textsl{soffice} (o \textit{soft
   limit}) dato che il suo valore può essere aumentato, mentre il secondo è
 detto \textsl{duro} (o \textit{hard limit}), in quanto un processo normale non
 può modificarne il valore. Il valore di questi limiti è mantenuto in una
-struttura \var{rlimit}, la cui definizione è riportata in
+struttura \struct{rlimit}, la cui definizione è riportata in
 \figref{fig:sys_rlimit_struct}, ed i cui campi corrispondono appunto a limite
 corrente e massimo.
 
@@ -1479,15 +1481,15 @@ struct rlimit {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{rlimit} per impostare i limiti di utilizzo 
+  \caption{La struttura \structd{rlimit} per impostare i limiti di utilizzo 
     delle risorse usate da un processo.}
   \label{fig:sys_rlimit_struct}
 \end{figure}
 
 In genere il superamento di un limite comporta o l'emissione di un segnale o
-il fallimento della system call che lo ha provocato; per far leggere o
-impostare i limiti di utilizzo delle risorse da parte di un processo le
-\acr{glibc} prevedono due funzioni, \func{getrlimit} e \func{setrlimit}, i cui
+il fallimento della system call che lo ha provocato; per permettere di leggere
+e di impostare i limiti di utilizzo delle risorse da parte di un processo
+Linux prevede due funzioni, \funcd{getrlimit} e \funcd{setrlimit}, i cui
 prototipi sono:
 \begin{functions}
   \headdecl{sys/time.h} 
@@ -1512,10 +1514,12 @@ prototipi sono:
   ed \errval{EFAULT}.}
 \end{functions}
 
-Entrambe le funzioni permettono di specificare su quale risorsa si vuole
-operare attraverso \param{resource}, i cui possibili valori sono elencati in
-\secref{tab:sys_rlimit_values}, e utilizzano una struttura \var{rlimit} per
-specificarne i valori.
+Entrambe le funzioni permettono di specificare, attraverso l'argomento
+\param{resource}, su quale risorsa si vuole operare: i possibili valori di
+questo argomento sono elencati in \secref{tab:sys_rlimit_values}. L'acceso
+(rispettivamente in lettura e scrittura) ai valori effettivi dei limiti viene
+poi effettuato attraverso la struttura \struct{rlimit} puntata da
+\param{rlim}.
 
 \begin{table}[htb]
   \footnotesize
@@ -1556,7 +1560,9 @@ specificarne i valori.
                               aprire. L'apertura di un ulteriore file fallirà
                               con un errore \errcode{EMFILE}.\\
     \const{RLIMIT\_MEMLOCK}&  L'ammontare massimo di memoria che può essere
-                              bloccata (vedi \secref{sec:proc_mem_lock}).\\
+                              bloccata in RAM senza
+                              paginazione\index{paginazione} (vedi
+                              \secref{sec:proc_mem_lock}).\\ 
     \const{RLIMIT\_AS}     &  La dimensione massima di tutta la memoria che il
                               processo può ottenere. Se il processo tenta di
                               allocarne di più  funzioni come \func{brk},
@@ -1569,14 +1575,17 @@ specificarne i valori.
 \end{table}
 
 \footnotetext{Impostare questo limite a zero è la maniera più semplice per
-  evitare la creazione di \file{core} file.}
+  evitare la creazione di \file{core} file (al proposito si veda
+  \secref{sec:sig_prog_error}).}
 
-È inoltre definita la costante \const{RLIM\_INFINITY} che permette di
-sbloccare l'uso di una risorsa, ma solo un processo con i privilegi di
-amministratore può innalzare un limite al di sopra del valore corrente del
-limite massimo. Si tenga conto infine che tutti i limiti vengono ereditati dal
-processo padre attraverso una \func{fork} (vedi \secref{sec:proc_fork}) e
-mantenuti attraverso una \func{exec} (vedi \secref{sec:proc_exec}).
+Nello specificare un limite, oltre a dei valori specifici, si può anche usare
+la costante \const{RLIM\_INFINITY} che permette di sbloccare l'uso di una
+risorsa; ma si ricordi che solo un processo con i privilegi di amministratore
+può innalzare un limite al di sopra del valore corrente del limite massimo. Si
+tenga conto infine che tutti i limiti vengono ereditati dal processo padre
+attraverso una \func{fork} (vedi \secref{sec:proc_fork}) e mantenuti per gli
+altri programmi eseguiti attraverso una \func{exec} (vedi
+\secref{sec:proc_exec}).
 
 
 \subsection{Le risorse di memoria e processore}
@@ -1587,23 +1596,24 @@ La gestione della memoria 
 meccanismo della memoria virtuale\index{memoria virtuale} attraverso la
 divisione della memoria fisica in pagine.
 
-In genere questo è del tutto trasparente al singolo processo, ma in certi
+In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi
 casi, come per l'I/O mappato in memoria (vedi \secref{sec:file_memory_map})
 che usa lo stesso meccanismo per accedere ai file, è necessario conoscere le
 dimensioni delle pagine usate dal kernel. Lo stesso vale quando si vuole
-gestire in maniera ottimale l'interazione della memoria allocata con il
-meccanismo della paginazione.
+gestire in maniera ottimale l'interazione della memoria che si sta allocando
+con il meccanismo della paginazione\index{paginazione}.
 
 Di solito la dimensione delle pagine di memoria è fissata dall'architettura
-hardware, per cui in genere la dimensione delle pagine di memoria era una
-costante definita in fase di compilazione, ma oggi alcune architetture (ad
-esempio su Sun Sparc) permettono di variare questa dimensione, e non volendo
-dover fornire binari diversi per ogni possibile modello, è necessario poter
-utilizzare una funzione. 
-
-In genere questa dimensione può essere ottenuta attraverso una chiamata a
-\func{sysconf} come \code{sysconf(\_SC\_PAGESIZE)}, ma in BSD 4.2 è stata
-introdotta una apposita funzione, \func{getpagesize}, che restituisce la
+hardware, per cui il suo valore di norma veniva mantenuto in una costante che
+bastava utilizzare in fase di compilazione, ma oggi, con la presenza di alcune
+architetture (ad esempio Sun Sparc) che permettono di variare questa
+dimensione, per non dover ricompilare i programmi per ogni possibile modello e
+scelta di dimensioni, è necessario poter utilizzare una funzione.
+
+Dato che si tratta di una caratteristica generale del sistema, questa
+dimensione può essere ottenuta come tutte le altre attraverso una chiamata a
+\func{sysconf} (nel caso \code{sysconf(\_SC\_PAGESIZE)}, ma in BSD 4.2 è stata
+introdotta una apposita funzione, \funcd{getpagesize}, che restituisce la
 dimensione delle pagine di memoria; il suo prototipo è:
 \begin{prototype}{unistd.h}{int getpagesize(void)}
   Legge le dimensioni delle pagine di memoria.
@@ -1621,8 +1631,8 @@ precedenti le \acr{glibc} 2.1 implementavano questa funzione restituendo
 sempre un valore statico.
 
 Le \acr{glibc} forniscono, come specifica estensione GNU, altre due funzioni,
-\func{get\_phys\_pages} e \func{get\_avphys\_pages} che permettono di ottenere
-informazioni riguardo la memoria; i loro prototipi sono:
+\funcd{get\_phys\_pages} e \funcd{get\_avphys\_pages} che permettono di
+ottenere informazioni riguardo la memoria; i loro prototipi sono:
 \begin{functions}
   \headdecl{sys/sysinfo.h} 
   
@@ -1649,7 +1659,7 @@ attivi); anche queste sono informazioni comunque ottenibili attraverso
 \func{sysconf} utilizzando rispettivamente i parametri
 \const{\_SC\_NPROCESSORS\_CONF} e \const{\_SC\_NPROCESSORS\_ONLN}.
 
-Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che
+Infine le \acr{glibc} riprendono da BSD la funzione \funcd{getloadavg} che
 permette di ottenere il carico di processore della macchina, in questo modo è
 possibile prendere decisioni su quando far partire eventuali nuovi processi.
 Il suo prototipo è:
@@ -1728,7 +1738,7 @@ una precisione ovviamente superiore al \textit{calendar time} (che 
 dal sistema con una granularità di un secondo) e viene usato per tenere conto
 dei tempi di esecuzione dei processi. Per ciascun processo il kernel calcola
 tre tempi diversi:
-\begin{description*}
+\begin{description}
 \item[\textit{clock time}]: il tempo \textsl{reale} (viene chiamato anche
   \textit{wall clock time}) passato dall'avvio del processo. Chiaramente tale
   tempo dipende anche dal carico del sistema e da quanti altri processi
@@ -1737,7 +1747,7 @@ tre tempi diversi:
   delle istruzioni del processo in user space.
 \item[\textit{system time}]: il tempo che la CPU ha impiegato nel kernel per
   eseguire delle system call per conto del processo.
-\end{description*}
+\end{description}
 
 In genere la somma di \textit{user time} e \textit{system time} indica il
 tempo di processore totale in cui il sistema è stato effettivamente impegnato
@@ -1758,7 +1768,7 @@ un altro processo era in esecuzione o in attesa del risultato di una
 operazione di I/O. 
 
 La funzione più semplice per leggere il \textit{process time} di un processo è
-\func{clock}, che da una valutazione approssimativa del tempo di CPU
+\funcd{clock}, che da una valutazione approssimativa del tempo di CPU
 utilizzato dallo stesso; il suo prototipo è:
 \begin{prototype}{time.h}{clock\_t clock(void)}
   Legge il valore corrente del tempo di CPU.
@@ -1779,7 +1789,7 @@ riprender
 Come accennato in \secref{sec:sys_unix_time} il tempo di CPU è la somma di
 altri due tempi, l'\textit{user time} ed il \textit{system time} che sono
 quelli effettivamente mantenuti dal kernel per ciascun processo. Questi
-possono essere letti attraverso la funzione \func{times}, il cui prototipo è:
+possono essere letti attraverso la funzione \funcd{times}, il cui prototipo è:
 \begin{prototype}{sys/times.h}{clock\_t times(struct tms *buf)}
   Legge in \param{buf} il valore corrente dei tempi di processore.
   
@@ -1788,7 +1798,7 @@ possono essere letti attraverso la funzione \func{times}, il cui prototipo 
 \end{prototype}
 
 La funzione restituisce i valori di process time del processo corrente in una
-struttura di tipo \var{tms}, la cui definizione è riportata in
+struttura di tipo \struct{tms}, la cui definizione è riportata in
 \secref{fig:sys_tms_struct}. La struttura prevede quattro campi; i primi due,
 \var{tms\_utime} e \var{tms\_stime}, sono l'\textit{user time} ed il
 \textit{system time} del processo, così come definiti in
@@ -1808,7 +1818,7 @@ struct tms {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{tms} dei tempi di processore associati a un
+  \caption{La struttura \structd{tms} dei tempi di processore associati a un
     processo.} 
   \label{fig:sys_tms_struct}
 \end{figure}
@@ -1832,10 +1842,11 @@ verranno considerati nel calcolo di questi tempi.
 
 Come anticipato in \secref{sec:sys_unix_time} il \textit{calendar time} è
 mantenuto dal kernel in una variabile di tipo \type{time\_t}, che usualmente
-corrisponde ad un tipo nativo (in Linux è un intero a 32 bit).  Il valore
-corrente del \textit{calendar time}, che indicheremo come \textsl{tempo di
-  sistema}, può essere ottenuto con la funzione \func{time} che lo restituisce
-in nel suddetto formato; il suo prototipo è:
+corrisponde ad un tipo elementare (in Linux è definito come \ctyp{long int},
+che di norma corrisponde a 32 bit).  Il valore corrente del \textit{calendar
+  time}, che indicheremo come \textsl{tempo di sistema}, può essere ottenuto
+con la funzione \funcd{time} che lo restituisce in nel suddetto formato; il
+suo prototipo è:
 \begin{prototype}{time.h}{time\_t time(time\_t *t)}
   Legge il valore corrente del \textit{calendar time}.
   
@@ -1845,7 +1856,7 @@ in nel suddetto formato; il suo prototipo 
 \noindent dove \param{t}, se non nullo, deve essere  l'indirizzo di una
 variabile su cui duplicare il valore di ritorno.
 
-Analoga a \func{time} è la funzione \func{stime} che serve per effettuare
+Analoga a \func{time} è la funzione \funcd{stime} che serve per effettuare
 l'operazione inversa, e cioè per impostare il tempo di sistema qualora questo
 sia necessario; il suo prototipo è:
 \begin{prototype}{time.h}{int stime(time\_t *t)}
@@ -1862,7 +1873,7 @@ altrimenti la chiamata fallir
 Data la scarsa precisione nell'uso di \type{time\_t} (che ha una risoluzione
 massima di un secondo) quando si devono effettuare operazioni sui tempi di
 norma l'uso delle funzioni precedenti è sconsigliato, ed esse sono di solito
-sostituite da \func{gettimeofday} e \func{settimeofday},\footnote{le due
+sostituite da \funcd{gettimeofday} e \funcd{settimeofday},\footnote{le due
   funzioni \func{time} e \func{stime} sono più antiche e derivano da SVr4,
   \func{gettimeofday} e \func{settimeofday} sono state introdotte da BSD, ed
   in BSD4.3 sono indicate come sostitute delle precedenti.} i cui prototipi
@@ -1886,8 +1897,8 @@ sono:
     \errval{EPERM}.}
 \end{functions}
 
-Queste funzioni utilizzano una struttura di tipo \var{timeval}, la cui
-definizione, insieme a quella della analoga \var{timespec}, è riportata in
+Queste funzioni utilizzano una struttura di tipo \struct{timeval}, la cui
+definizione, insieme a quella della analoga \struct{timespec}, è riportata in
 \figref{fig:sys_timeval_struct}. Le \acr{glibc} infatti forniscono queste due
 rappresentazioni alternative del \textit{calendar time} che rispetto a
 \type{time\_t} consentono rispettivamente precisioni del microsecondo e del
@@ -1911,29 +1922,35 @@ struct timespec {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{Le strutture \var{timeval} e \var{timespec} usate per una
+  \caption{Le strutture \structd{timeval} e \structd{timespec} usate per una
     rappresentazione ad alta risoluzione del \textit{calendar time}.}
   \label{fig:sys_timeval_struct}
 \end{figure}
 
-Come nel caso di \func{stime} anche \func{settimeofday} (e qualunque funzione
-vada a modificare l'orologio di sistema, come quelle che tratteremo in
-seguito) può essere utilizzata solo da un processo coi privilegi di
-amministratore.  Il secondo parametro di entrambe le funzioni è una struttura
-\var{timezone}, che storicamente veniva utilizzata per specificare appunto la
-\textit{time zone}, cioè l'insieme del fuso orario e delle convenzioni per
+Come nel caso di \func{stime} anche \func{settimeofday} (la cosa continua a
+valere per qualunque funzione che vada a modificare l'orologio di sistema,
+quindi anche per quelle che tratteremo in seguito) può essere utilizzata solo
+da un processo coi privilegi di amministratore.
+
+Il secondo parametro di entrambe le funzioni è una struttura
+\struct{timezone}, che storicamente veniva utilizzata per specificare appunto
+la \textit{time zone}, cioè l'insieme del fuso orario e delle convenzioni per
 l'ora legale che permettevano il passaggio dal tempo universale all'ora
-locale. Questo parametro è obsoleto e in Linux non è mai stato utilizzato e
-non è supportato né dalle vecchie \textsl{libc5}, né dalle \textsl{glibc}:
-pertanto deve essere sempre impostato a \val{null}.
+locale. Questo parametro oggi è obsoleto ed in Linux non è mai stato
+utilizzato; esso non è supportato né dalle vecchie \textsl{libc5}, né dalle
+\textsl{glibc}: pertanto quando si chiama questa funzione deve essere sempre
+impostato a \val{NULL}.
 
 Modificare l'orologio di sistema con queste funzioni è comunque problematico,
 in quanto esse effettuano un cambiamento immediato. Questo può creare dei
 buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
-conseguenze indesiderate; ad esempio se si porta avanti l'orologio si possono
+conseguenze indesiderate.  Ad esempio se si porta avanti l'orologio si possono
 perdere delle esecuzioni di \cmd{cron} programmate nell'intervallo che si è
-saltato. Per questo motivo la modalità più corretta per impostare l'ora è
-quella di usare la funzione \func{adjtime}, il cui prototipo è:
+saltato. Oppure se si porta indietro l'orologio si possono eseguire due volte
+delle operazioni previste nell'intervallo di tempo che viene ripetuto. 
+
+Per questo motivo la modalità più corretta per impostare l'ora è quella di
+usare la funzione \funcd{adjtime}, il cui prototipo è:
 \begin{prototype}{sys/time.h}
 {int adjtime(const struct timeval *delta, struct timeval *olddelta)} 
   
@@ -1951,27 +1968,6 @@ il tempo richiesto, altrimenti sar
 usato, se non nullo, per ricevere il valore dell'ultimo aggiustamento
 effettuato.
 
-Linux poi prevede un'altra funzione, \func{adjtimex}, che consente un
-aggiustamento molto più dettagliato, permettendo ad esempio anche di
-modificare anche la velocità dell'orologio di sistema.  Il suo prototipo è:
-\begin{prototype}{sys/timex.h}
-{int adjtimex(struct timex *buf)} 
-  
-  Aggiusta del valore \param{delta} l'orologio di sistema.
-  
-  \bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
-    caso di successo e -1 in caso di errore, nel qual caso \var{errno}
-    assumerà i valori \errval{EFAULT}, \errval{EINVAL} ed \errval{EPERM}.}
-\end{prototype}
-
-La funzione richiede una struttura di tipo \var{timex}, la cui definizione,
-così come effettuata in \file{sys/timex.h}, è riportata in
-\figref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del
-campo \var{mode}, che specifica quale parametro dell'orologio di sistema,
-specificato in un opportuno campo di \var{timex}, deve essere impostato. Un
-valore nullo serve per leggere i parametri correnti; i valori diversi da zero
-devono essere specificati come OR binario delle costanti riportate in
-\secref{tab:sys_timex_mode}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -2001,10 +1997,34 @@ struct timex {
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{timex} per il controllo dell'orologio di sistema.}
+  \caption{La struttura \structd{timex} per il controllo dell'orologio di
+    sistema.} 
   \label{fig:sys_timex_struct}
 \end{figure}
 
+Linux poi prevede un'altra funzione, che consente un aggiustamento molto più
+dettagliato del tempo, permettendo ad esempio anche di modificare anche la
+velocità dell'orologio di sistema.  La funzione è \funcd{adjtimex} ed il suo
+prototipo è:
+\begin{prototype}{sys/timex.h}
+{int adjtimex(struct timex *buf)} 
+  
+  Aggiusta del valore \param{delta} l'orologio di sistema.
+  
+  \bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
+    caso di successo e -1 in caso di errore, nel qual caso \var{errno}
+    assumerà i valori \errval{EFAULT}, \errval{EINVAL} ed \errval{EPERM}.}
+\end{prototype}
+
+La funzione richiede una struttura di tipo \struct{timex}, la cui definizione,
+così come effettuata in \file{sys/timex.h}, è riportata in
+\figref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del
+campo \var{mode}, che specifica quale parametro dell'orologio di sistema,
+specificato in un opportuno campo di \struct{timex}, deve essere impostato. Un
+valore nullo serve per leggere i parametri correnti; i valori diversi da zero
+devono essere specificati come OR binario delle costanti riportate in
+\secref{tab:sys_timex_mode}.
+
 La funzione utilizza il meccanismo di David L. Mills, descritto nell'RFC~1305,
 che è alla base del protocollo NTP; la funzione è specifica di Linux e non
 deve essere usata se la portabilità è un requisito, le \acr{glibc} provvedono
@@ -2012,13 +2032,13 @@ anche un suo omonimo \func{ntp\_adjtime}.  La trattazione completa di questa
 funzione necessita di una lettura approfondita del meccanismo descritto
 nell'RFC~1305, ci limitiamo a descrivere in \tabref{tab:sys_timex_mode} i
 principali valori utilizzabili per il campo \var{mode}, un elenco più
-dettagliato del significato dei vari campi della struttura \var{timex} può
+dettagliato del significato dei vari campi della struttura \struct{timex} può
 essere ritrovato in \cite{glibc}.
 
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|c| p{10cm}|}
+  \begin{tabular}[c]{|l|c| p{9cm}|}
     \hline
     \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
     \hline
@@ -2027,33 +2047,33 @@ essere ritrovato in \cite{glibc}.
                                            reale e l'orologio di sistema, che 
                                            deve essere indicata in microsecondi
                                            nel campo \var{offset} di
-                                           \var{timex}.\\ 
+                                           \struct{timex}.\\ 
     \const{ADJ\_FREQUENCY}      & 0x0002 & Imposta la differenze in frequenza
                                            fra il tempo reale e l'orologio di
                                            sistema, che deve essere indicata
                                            in parti per milione nel campo
-                                           \var{frequency} di \var{timex}.\\
+                                           \var{frequency} di \struct{timex}.\\
     \const{ADJ\_MAXERROR}       & 0x0004 & Imposta il valore massimo 
                                            dell'errore
                                            sul tempo, espresso in microsecondi 
                                            nel campo \var{maxerror} di
-                                           \var{timex}.\\ 
+                                           \struct{timex}.\\ 
     \const{ADJ\_ESTERROR}       & 0x0008 & Imposta la stima dell'errore
                                            sul tempo, espresso in microsecondi 
                                            nel campo \var{esterror} di
-                                           \var{timex}.\\
+                                           \struct{timex}.\\
     \const{ADJ\_STATUS}         & 0x0010 & Imposta alcuni
                                            valori di stato interni usati dal
                                            sistema nella gestione
                                            dell'orologio specificati nel campo
-                                           \var{status} di \var{timex}.\\ 
+                                           \var{status} di \struct{timex}.\\ 
     \const{ADJ\_TIMECONST}      & 0x0020 & Imposta la larghezza di banda del 
                                            PLL implementato dal kernel,
                                            specificato nel campo
-                                           \var{constant} di \var{timex}.\\ 
+                                           \var{constant} di \struct{timex}.\\ 
     \const{ADJ\_TICK}           & 0x4000 & Imposta il valore dei tick del timer
                                            in microsecondi, espresso nel campo
-                                           \var{tick} di \var{timex}.\\ 
+                                           \var{tick} di \struct{timex}.\\ 
     \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum 
                                            dell'orologio secondo il valore del
                                            campo \var{offset} simulando il
@@ -2061,7 +2081,7 @@ essere ritrovato in \cite{glibc}.
     \hline
   \end{tabular}
   \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
-    struttura \var{timex}.} 
+    struttura \struct{timex}.} 
   \label{tab:sys_timex_mode}
 \end{table}
 
@@ -2124,17 +2144,17 @@ struct tm {
         int     tm_yday;        /* day in the year */
         int     tm_isdst;       /* daylight saving time */
         long int tm_gmtoff;     /* Seconds east of UTC.  */
-        cost char *tm_zone;     /* Timezone abbreviation.  */
+        const char *tm_zone;    /* Timezone abbreviation.  */
 };
     \end{lstlisting}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \var{tm} per una rappresentazione del tempo in termini
-    di ora, minuti, secondi, ecc.}
+  \caption{La struttura \structd{tm} per una rappresentazione del tempo in
+    termini di ora, minuti, secondi, ecc.}
   \label{fig:sys_tm_struct}
 \end{figure}
 
-Questo viene effettuato attraverso una opportuna struttura \var{tm}, la cui
+Questo viene effettuato attraverso una opportuna struttura \struct{tm}, la cui
 definizione è riportata in \figref{fig:sys_tm_struct}, ed è in genere questa
 struttura che si utilizza quando si deve specificare un tempo a partire dai
 dati naturali (ora e data), dato che essa consente anche di trattare la
@@ -2169,7 +2189,7 @@ tempo in una stringa contenente data ed ora, i loro prototipi sono:
   Converte il \textit{broken-down time} in formato \type{time\_t}.
   
   \bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso
-  di successo e \val{null} in caso di errore, tranne che \func{mktime} che
+  di successo e \val{NULL} in caso di errore, tranne che \func{mktime} che
   restituisce direttamente il valore o -1 in caso di errore.}
 \end{functions}
 
@@ -2189,7 +2209,7 @@ l'utente deve specificare il buffer su cui la stringa deve essere copiata
 (deve essere di almeno 26 caratteri).
 
 Le altre tre funzioni, \func{gmtime}, \func{localtime} e \func{mktime} servono
-per convertire il tempo dal formato \type{time\_t} a quello di \var{tm} e
+per convertire il tempo dal formato \type{time\_t} a quello di \struct{tm} e
 viceversa; \func{gmtime} effettua la conversione usando il tempo coordinato
 universale (UTC), cioè l'ora di Greenwich; mentre \func{localtime} usa l'ora
 locale; \func{mktime} esegue la conversione inversa.  
@@ -2206,7 +2226,7 @@ locale, compresa l'eventuale ora legale. Questo viene fatto attraverso le tre
 variabili globali mostrate in \figref{fig:sys_tzname}, cui si accede quando si
 include \file{time.h}. Queste variabili vengono impostate quando si chiama una
 delle precedenti funzioni di conversione, oppure invocando direttamente la
-funzione \func{tzset}, il cui prototipo è:
+funzione \funcd{tzset}, il cui prototipo è:
 \begin{prototype}{sys/timex.h}
 {void tzset(void)} 
   
@@ -2245,8 +2265,8 @@ solare, la seconda per l'ora legale.\footnote{anche se sono indicati come
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
 caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
-gionrno) di un tempo si può ricorrere alla più sofisticata \func{strftime}, il
-cui prototipo è:
+giorno) di un tempo si può ricorrere alla più sofisticata \funcd{strftime},
+il cui prototipo è:
 \begin{prototype}{time.h}
 {size\_t strftime(char *s, size\_t max, const char *format, 
   const struct tm *tm)}
@@ -2255,7 +2275,7 @@ Stampa il tempo \param{tm} nella stringa \param{s} secondo il formato
 \param{format}.
   
   \bodydesc{La funzione ritorna il numero di caratteri stampati in \param{s},
-  altrimenti restuisce 0.}
+  altrimenti restituisce 0.}
 \end{prototype}
 
 La funzione converte opportunamente il tempo \param{tm} in una stringa di
@@ -2312,7 +2332,7 @@ viene utilizzato come modificatore; alcuni\footnote{per la precisione quelli
   le \acr{glibc} provvedono tutte le estensioni introdotte da POSIX.2 per il
   comando \cmd{date}, i valori introdotti da SVID3 e ulteriori estensioni GNU;
   l'elenco completo dei possibili valori è riportato nella pagina di manuale
-  della funzione.} dei possibili valori che esso può assumere sono ripotati in
+  della funzione.} dei possibili valori che esso può assumere sono riportati in
 \tabref{tab:sys_strftime_format}. La funzione tiene conto anche della presenza
 di una localizzazione per stampare in maniera adeguata i vari nomi.
 
@@ -2347,14 +2367,14 @@ Per riportare il tipo di errore il sistema usa la variabile globale
 variabile è in genere definita come \direct{volatile} dato che può essere
 cambiata in modo asincrono da un segnale (si veda \secref{sec:sig_sigchld} per
 un esempio, ricordando quanto trattato in \secref{sec:proc_race_cond}), ma
-dato che un manipolatore di segnale scritto bene salva e ripristina il valore
+dato che un gestore 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; essi iniziano tutti per
-\var{E} e si possono considerare come nomi riservati. In seguito faremo
+\val{E} e si possono considerare come nomi riservati. In seguito faremo
 sempre riferimento a tali valori, quando descriveremo i possibili errori
 restituiti dalle funzioni. Il programma di esempio \cmd{errcode} stampa il
 codice relativo ad un valore numerico con l'opzione \cmd{-l}.
@@ -2379,13 +2399,13 @@ Bench
 \var{errno} le librerie provvedono alcune funzioni e variabili utili per
 riportare in opportuni messaggi le condizioni di errore verificatesi.  La
 prima funzione che si può usare per ricavare i messaggi di errore è
-\func{strerror}, il cui prototipo è:
+\funcd{strerror}, il cui prototipo è:
 \begin{prototype}{string.h}{char *strerror(int errnum)} 
   Restituisce una stringa con il messaggio di errore relativo ad
   \param{errnum}.
   
   \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di
-    errore in caso di successo e \val{null} in caso di errore, nel qual caso
+    errore in caso di successo e \val{NULL} in caso di errore, nel qual caso
     \var{errno} assumerà il valore \errval{EINVAL} se si è specificato un
     numero di errore non valido.}
 \end{prototype}
@@ -2427,16 +2447,16 @@ zero (il carattere NUL).
 
 Una seconda funzione usata per riportare i codici di errore in maniera
 automatizzata sullo standard error (vedi \secref{sec:file_std_descr}) è
-\func{perror}, il cui prototipo è:
+\funcd{perror}, il cui prototipo è:
 \begin{prototype}{stdio.h}{void perror(const char *message)} 
   Stampa il messaggio di errore relativo al valore corrente di \var{errno}
-  sullo standard error; preceduto dalla stringa \var{message}.
+  sullo standard error; preceduto dalla stringa \param{message}.
 \end{prototype}
 
 I messaggi di errore stampati sono gli stessi di \func{strerror}, (riportati
 in \capref{cha:errors}), e, usando il valore corrente di \var{errno}, si
 riferiscono all'ultimo errore avvenuto. La stringa specificata con
-\var{message} viene stampato prime del messaggio d'errore, seguita dai due
+\param{message} viene stampato prime del messaggio d'errore, seguita dai due
 punti e da uno spazio, il messaggio è terminato con un a capo.
 
 Il messaggio può essere riportato anche usando altre variabili globali
@@ -2513,7 +2533,7 @@ messaggi con maggiore informazione; ad esempio negli standard di
 programmazione GNU si richiede che ogni messaggio di errore sia preceduto dal
 nome del programma, ed in generale si può voler stampare il contenuto di
 qualche variabile; per questo le \acr{glibc} definiscono la funzione
-\func{error}, il cui prototipo è:
+\funcd{error}, il cui prototipo è:
 \begin{prototype}{stdio.h}
 {void error(int status, int errnum, const char *format, ...)} 
 
@@ -2546,8 +2566,8 @@ un'altra variabile globale, \var{error\_message\_count}, che tiene conto di
 quanti errori ci sono stati.
 
 Un'altra funzione per la stampa degli errori, ancora più sofisticata, è
-\func{error\_at\_line}, che prende due argomenti aggiuntivi per indicare linea
-e file su cui è avvenuto l'errore; il suo prototipo è:
+\funcd{error\_at\_line}, che prende due argomenti aggiuntivi per indicare
+linea e file su cui è avvenuto l'errore; il suo prototipo è:
 \begin{prototype}{stdio.h}
 {void error\_at\_line(int status, int errnum, const char *fname, 
   unsigned int lineno, const char *format, ...)}