Correzioni multiple agli indici delle funzioni, inserita macro per
[gapil.git] / process.tex
index 29f42348652ef2fe20c0d6a317cd23cd59d6dd41..5e30c7aa2b0a72c6dd88c07025e65f4b9c3811b7 100644 (file)
@@ -1,6 +1,6 @@
 %% process.tex
 %%
-%% Copyright (C) 2000-2011 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -73,10 +73,10 @@ Il funzionamento di \cmd{ld-linux.so} è controllato da alcune variabili di
 ambiente e dal contenuto del file \conffile{/etc/ld.so.conf}, che consentono
 di elencare le directory un cui cercare le librerie e determinare quali
 verranno utilizzate.  In particolare con la variabile di ambiente
-\texttt{LD\_LIBRARY\_PATH} si possono indicare ulteriori directory rispetto a
+\envvar{LD\_LIBRARY\_PATH} si possono indicare ulteriori directory rispetto a
 quelle di sistema in cui inserire versioni personali delle librerie che hanno
 la precedenza su quelle di sistema, mentre con la variabile di ambiente
-\texttt{LD\_PRELOAD} si può passare direttamente una lista di file di librerie
+\envvar{LD\_PRELOAD} si può passare direttamente una lista di file di librerie
 condivise da usare al posto di quelli di sistema. In questo modo è possibile
 effettuare lo sviluppo o il test di nuove librerie senza dover sostituire
 quelle di sistema. Ulteriori dettagli sono riportati nella pagina di manuale
@@ -84,11 +84,11 @@ di \cmd{ld.so} e per un approfondimento dell'argomento si può consultare
 sez.~3.1.2 di \cite{AGL}.
 
 Una volta completate le operazioni di inizializzazione di \cmd{ld-linux.so}, il
-sistema fa partire qualunque programma chiamando la funzione \func{main}. Sta
+sistema fa partire qualunque programma chiamando la funzione \code{main}. Sta
 al programmatore chiamare così la funzione principale del programma da cui si
 suppone che inizi l'esecuzione. In ogni caso senza questa funzione lo stesso
 \textit{link-loader} darebbe luogo ad errori.  Lo standard ISO C specifica che
-la funzione \func{main} può non avere argomenti o prendere due argomenti che
+la funzione \code{main} può non avere argomenti o prendere due argomenti che
 rappresentano gli argomenti passati da linea di comando (su cui torneremo in
 sez.~\ref{sec:proc_par_format}), in sostanza un prototipo che va sempre bene è
 il seguente:
@@ -97,7 +97,7 @@ il seguente:
 \itindend{link-loader}
 
 In realtà nei sistemi Unix esiste un altro modo per definire la funzione
-\func{main}, che prevede la presenza di un terzo argomento, \code{char
+\code{main}, che prevede la presenza di un terzo argomento, \code{char
   *envp[]}, che fornisce l'\textsl{ambiente} del programma; questa forma però
 non è prevista dallo standard POSIX.1 per cui se si vogliono scrivere
 programmi portabili è meglio evitarla. Per accedere all'ambiente, come vedremo
@@ -105,9 +105,9 @@ in sez.~\ref{sec:proc_environ} si usa in genere una variabile globale che
 viene sempre definita automaticamente.
 
 Ogni programma viene fatto partire mettendo in esecuzione il codice contenuto
-nella funzione \func{main}, ogni altra funzione usata dal programma, che sia
+nella funzione \code{main}, ogni altra funzione usata dal programma, che sia
 ottenuta da una libreria condivisa, o che sia direttamente definita nel
-codice, dovrà essere invocata a partire dal codice di \func{main}. Nel caso di
+codice, dovrà essere invocata a partire dal codice di \code{main}. Nel caso di
 funzioni definite nel programma occorre tenere conto che, nel momento stesso
 in cui si usano le librerie di sistema (vale a dire la \acr{glibc}) alcuni
 nomi sono riservati e non possono essere utilizzati. 
@@ -142,7 +142,7 @@ evitarli, in particolare questi sono:
   il controllo e la conversione del tipo di caratteri,
 \item i nomi che iniziano con ``\texttt{LC\_}'' e costituiti
   da lettere maiuscole che possono essere usato per macro attinenti la
-  localizzazione (vedi sez.~\ref{sec:proc_localization}),
+  localizzazione,% mettere in seguito (vedi sez.~\ref{sec:proc_localization}),
 \item nomi che iniziano con ``\texttt{SIG}'' o ``\texttt{SIG\_}'' e costituiti
   da lettere maiuscole che potrebbero essere usati per nuovi nomi di segnale
   (vedi sez.~\ref{sec:sig_classification}),
@@ -213,25 +213,27 @@ definizioni.
     & ANSI C& POSIX& \\
     \hline
     \hline
-    \file{assert.h}&$\bullet$&    --   & Verifica le asserzioni fatte in un
-                                         programma.\\ 
-    \file{ctype.h} &$\bullet$&    --   & Tipi standard.\\
-    \file{dirent.h}&   --    &$\bullet$& Manipolazione delle directory.\\
-    \file{errno.h} &   --    &$\bullet$& Errori di sistema.\\
-    \file{fcntl.h} &   --    &$\bullet$& Controllo sulle opzioni dei file.\\
-    \file{limits.h}&   --    &$\bullet$& Limiti e parametri del sistema.\\
-    \file{malloc.h}&$\bullet$&    --   & Allocazione della memoria.\\
-    \file{setjmp.h}&$\bullet$&    --   & Salti non locali.\\
-    \file{signal.h}&   --    &$\bullet$& Gestione dei segnali.\\
-    \file{stdarg.h}&$\bullet$&    --   & Gestione di funzioni a argomenti
-                                         variabili.\\ 
-    \file{stdio.h} &$\bullet$&    --   & I/O bufferizzato in standard ANSI C.\\
-    \file{stdlib.h}&$\bullet$&    --   & Definizioni della libreria standard.\\
-    \file{string.h}&$\bullet$&    --   & Manipolazione delle stringhe.\\
-    \file{time.h}  &   --    &$\bullet$& Gestione dei tempi.\\
-    \file{times.h} &$\bullet$&    --   & Gestione dei tempi.\\
-    \file{unistd.h}&   --    &$\bullet$& Unix standard library.\\
-    \file{utmp.h}  &   --    &$\bullet$& Registro connessioni utenti.\\
+    \headfile{assert.h}&$\bullet$&    --   & Verifica le asserzioni fatte in un
+                                             programma.\\ 
+    \headfile{ctype.h} &$\bullet$&    --   & Tipi standard.\\
+    \headfile{dirent.h}&   --    &$\bullet$& Manipolazione delle directory.\\
+    \headfile{errno.h} &   --    &$\bullet$& Errori di sistema.\\
+    \headfile{fcntl.h} &   --    &$\bullet$& Controllo sulle opzioni dei file.\\
+    \headfile{limits.h}&   --    &$\bullet$& Limiti e parametri del sistema.\\
+    \headfile{malloc.h}&$\bullet$&    --   & Allocazione della memoria.\\
+    \headfile{setjmp.h}&$\bullet$&    --   & Salti non locali.\\
+    \headfile{signal.h}&   --    &$\bullet$& Gestione dei segnali.\\
+    \headfile{stdarg.h}&$\bullet$&    --   & Gestione di funzioni a argomenti
+                                             variabili.\\ 
+    \headfile{stdio.h} &$\bullet$&    --   & I/O bufferizzato in standard ANSI
+                                             C.\\ 
+    \headfile{stdlib.h}&$\bullet$&    --   & Definizioni della libreria
+                                             standard.\\ 
+    \headfile{string.h}&$\bullet$&    --   & Manipolazione delle stringhe.\\
+    \headfile{time.h}  &   --    &$\bullet$& Gestione dei tempi.\\
+    \headfile{times.h} &$\bullet$&    --   & Gestione dei tempi.\\
+    \headfile{unistd.h}&   --    &$\bullet$& Unix standard library.\\
+    \headfile{utmp.h}  &   --    &$\bullet$& Registro connessioni utenti.\\
     \hline
   \end{tabular}
   \caption{Elenco dei principali \textit{header file} definiti dagli standard
@@ -243,10 +245,11 @@ Un esempio di inclusione di questi file, preso da uno dei programmi di
 esempio, è il seguente, e si noti come gli \textit{header file} possano essere
 referenziati con il nome fra parentesi angolari, nel qual caso si indica l'uso
 di quelli installati con il sistema,\footnote{in un sistema GNU/Linux che
-  segue le specifiche del \textit{Filesystem Hierarchy Standard} (per maggiori
-  informazioni si consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto
-  \texttt{/usr/include}.} o fra virgolette, nel qual caso si fa riferimento ad
-una versione locale, da indicare con un pathname relativo:
+  segue le specifiche del \itindex{Filesystem~Hierarchy~Standard~(FHS)}
+  \textit{Filesystem Hierarchy Standard} (per maggiori informazioni si
+  consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto \texttt{/usr/include}.}
+o fra virgolette, nel qual caso si fa riferimento ad una versione locale, da
+indicare con un \itindsub{pathname}{relativo} \textit{pathname} relativo:
 \includecodesnip{listati/main_include.c}
 
 Si tenga presente che oltre ai nomi riservati a livello generale di cui si è
@@ -254,24 +257,24 @@ parlato in sez.~\ref{sec:proc_main}, alcuni di questi \textit{header file}
 riservano degli ulteriori identificativi, il cui uso sarà da evitare, ad
 esempio si avrà che:
 \begin{itemize*}
-\item in \file{dirent.h} vengono riservati i nomi che iniziano con
+\item in \headfile{dirent.h} vengono riservati i nomi che iniziano con
   ``\texttt{d\_}'' e costituiti da lettere minuscole,
-\item in \file{fcntl.h} vengono riservati i nomi che iniziano con
+\item in \headfile{fcntl.h} vengono riservati i nomi che iniziano con
   ``\texttt{l\_}'', ``\texttt{F\_}'',``\texttt{O\_}'' e ``\texttt{S\_}'',
-\item in \file{limits.h} vengono riservati i nomi che finiscono in
+\item in \headfile{limits.h} vengono riservati i nomi che finiscono in
   ``\texttt{\_MAX}'',
-\item in \file{signal.h} vengono riservati i nomi che iniziano con
+\item in \headfile{signal.h} vengono riservati i nomi che iniziano con
   ``\texttt{sa\_}'' e ``\texttt{SA\_}'',
-\item in \file{sys/stat.h} vengono riservati i nomi che iniziano con
+\item in \headfile{sys/stat.h} vengono riservati i nomi che iniziano con
   ``\texttt{st\_}'' e ``\texttt{S\_}'',
-\item in \file{sys/times.h} vengono riservati i nomi che iniziano con
+\item in \headfile{sys/times.h} vengono riservati i nomi che iniziano con
   ``\texttt{tms\_}'',
-\item in \file{termios.h} vengono riservati i nomi che iniziano con
+\item in \headfile{termios.h} vengono riservati i nomi che iniziano con
   ``\texttt{c\_}'', ``\texttt{V}'', ``\texttt{I}'', ``\texttt{O}'' e
   ``\texttt{TC}'' e con ``\texttt{B}'' seguito da un numero,
-\item in \file{grp.h} vengono riservati i nomi che iniziano con
+\item in \headfile{grp.h} vengono riservati i nomi che iniziano con
   ``\texttt{gr\_}'',
-\item in \file{pwd.h}vengono riservati i nomi che iniziano con
+\item in \headfile{pwd.h}vengono riservati i nomi che iniziano con
   ``\texttt{pw\_}'',
 \end{itemize*}
 
@@ -348,7 +351,7 @@ dall'architettura,\footnote{in genere le vecchie \textit{system call} non
 ciascuna \textit{system call} viene in genere identificata da una costante
 nella forma \texttt{SYS\_*} dove al prefisso viene aggiunto il nome che spesso
 corrisponde anche alla omonima funzione di libreria. Queste costanti sono
-definite nel file \texttt{sys/syscall.h}, ma si possono anche usare
+definite nel file \headfile{sys/syscall.h}, ma si possono anche usare
 direttamente valori numerici.
 
 
@@ -356,11 +359,11 @@ direttamente valori numerici.
 \label{sec:proc_conclusion}
 
 Normalmente un programma conclude la sua esecuzione quando si fa ritornare la
-funzione \func{main}, si usa cioè l'istruzione \instruction{return} del
+funzione \code{main}, si usa cioè l'istruzione \instruction{return} del
 linguaggio C all'interno della stessa, o se si richiede esplicitamente la
 chiusura invocando direttamente la funzione \func{exit}. Queste due modalità
 sono assolutamente equivalenti, dato che \func{exit} viene chiamata in maniera
-trasparente anche quando \func{main} ritorna, passandogli come argomento il
+trasparente anche quando \code{main} ritorna, passandogli come argomento il
 valore di ritorno (che essendo .
 
 La funzione \funcd{exit}, che è completamente generale, essendo definita dallo
@@ -386,18 +389,18 @@ vedremo a breve) che completa la terminazione del processo.
 
 \itindbeg{exit~status}
 
-Il valore dell'argomento \param{status} o il valore di ritorno di \func{main},
+Il valore dell'argomento \param{status} o il valore di ritorno di \code{main},
 costituisce quello che viene chiamato lo \textsl{stato di uscita}
 (l'\textit{exit status}) del processo. In generale si usa questo valore per
 fornire al processo padre (come vedremo in sez.~\ref{sec:proc_wait}) delle
 informazioni generiche sulla riuscita o il fallimento del programma appena
 terminato.
 
-Anche se l'argomento \param{status} (ed il valore di ritorno di \func{main})
+Anche se l'argomento \param{status} (ed il valore di ritorno di \code{main})
 sono numeri interi di tipo \ctyp{int}, si deve tener presente che il valore
 dello stato di uscita viene comunque troncato ad 8 bit,
 per cui deve essere sempre compreso fra 0 e 255. Si tenga presente che se si
-raggiunge la fine della funzione \func{main} senza ritornare esplicitamente si
+raggiunge la fine della funzione \code{main} senza ritornare esplicitamente si
 ha un valore di uscita indefinito, è pertanto consigliabile di concludere
 sempre in maniera esplicita detta funzione.
 
@@ -421,7 +424,7 @@ un intero di valore generico può comportare il rischio, qualora si vada ad
 usare un multiplo di 256, di avere uno stato di uscita uguale a zero, che
 verrebbe interpretato come un successo.
 
-Per questo motivo in \file{stdlib.h} sono definite, seguendo lo standard
+Per questo motivo in \headfile{stdlib.h} sono definite, seguendo lo standard
 POSIX, le due costanti \const{EXIT\_SUCCESS} e \const{EXIT\_FAILURE}, da usare
 sempre per specificare lo stato di uscita di un processo. Su Linux, ed in
 generale in qualunque sistema POSIX, ad esse sono assegnati rispettivamente i
@@ -431,7 +434,8 @@ valori 0 e 1.
 
 Una forma alternativa per effettuare una terminazione esplicita di un
 programma è quella di chiamare direttamente la \textit{system call}
-\func{\_exit}, che restituisce il controllo direttamente al kernel,
+\funcd{\_exit},\footnote{la stessa è definita anche come \funcd{\_Exit} in
+  \headfile{stdlib.h}.} che restituisce il controllo direttamente al kernel,
 concludendo immediatamente il processo, il suo prototipo è:
 
 \begin{funcproto}{ \fhead{unistd.h} \fdecl{void \_exit(int status)}
@@ -479,7 +483,7 @@ programma,\footnote{nel caso di \func{atexit} lo standard POSIX.1-2001
   richiede che siano registrabili almeno \const{ATEXIT\_MAX} funzioni (il
   valore può essere ottenuto con \func{sysconf}, vedi
   sez.~\ref{sec:sys_sysconf}).} sia per la chiamata ad \func{exit} che per il
-ritorno di \func{main}. La prima funzione che si può utilizzare a tal fine è
+ritorno di \code{main}. La prima funzione che si può utilizzare a tal fine è
 \funcd{atexit}, il cui prototipo è:
 
 \begin{funcproto}{ \fhead{stdlib.h} \fdecl{void (*function)(void)}
@@ -559,7 +563,7 @@ Allo stesso modo l'unico modo in cui un programma può concludere
 volontariamente la propria esecuzione è attraverso una chiamata alla
 \textit{system call} \func{\_exit}, sia che questa venga fatta esplicitamente,
 o in maniera indiretta attraverso l'uso di \func{exit} o il ritorno di
-\func{main}. 
+\code{main}. 
 
 Uno schema riassuntivo che illustra le modalità con cui si avvia e conclude
 normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
@@ -569,7 +573,7 @@ normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
 %  \includegraphics[width=9cm]{img/proc_beginend}
   \begin{tikzpicture}[>=stealth]
     \filldraw[fill=black!35] (-0.3,0) rectangle (12,1);
-    \draw(5.5,0.5) node {\large{kernel}};
+    \draw(5.5,0.5) node {\large{\textsf{kernel}}};
 
     \filldraw[fill=black!15] (1.5,2) rectangle (4,3);
     \draw (2.75,2.5) node {\texttt{ld-linux.so}};
@@ -596,9 +600,9 @@ normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
     \draw[->] (4,4.5) -- node[anchor=south]{\texttt{exit}} (exit);
     \draw[->] (exit) -- node[anchor=east]{\texttt{\_exit}}(6.75,1);
 
-    \draw (10,4.5) node (exithandler1) [rectangle,fill=black!15,rounded corners, draw]{exit handler};
-    \draw (10,5.5) node (exithandler2) [rectangle,fill=black!15,rounded corners, draw]{exit handler};
-    \draw (10,3.5) node (stream) [rectangle,fill=black!15,rounded corners, draw]{chiusura stream};
+    \draw (10,4.5) node (exithandler1) [rectangle,fill=black!15,rounded corners, draw]{\textsf{exit handler}};
+    \draw (10,5.5) node (exithandler2) [rectangle,fill=black!15,rounded corners, draw]{\textsf{exit handler}};
+    \draw (10,3.5) node (stream) [rectangle,fill=black!15,rounded corners, draw]{\textsf{chiusura stream}};
 
     \draw[<->, dashed] (exithandler1) -- (exit);
     \draw[<->, dashed] (exithandler2) -- (exit);
@@ -651,7 +655,7 @@ bit e di 8kb sulle alpha. Con le versioni più recenti del kernel è possibile
 anche utilizzare pagine di dimensioni maggiori (di 4Mb, dette \textit{huge
   page}), per sistemi con grandi quantitativi di memoria in cui l'uso di
 pagine troppo piccole comporta una perdita di prestazioni. In alcuni sistemi
-la costante \const{PAGE\_SIZE}, definita in \file{limits.h}, indica la
+la costante \const{PAGE\_SIZE}, definita in \headfile{limits.h}, indica la
 dimensione di una pagina in byte, con Linux questo non avviene e per ottenere
 questa dimensione si deve ricorrere alla funzione \func{getpagesize} (vedi
 sez.~\ref{sec:sys_memory_res}).
@@ -927,8 +931,8 @@ semplicemente allocati \param{size} byte e l'area di memoria non viene
 inizializzata.
 
 Una volta che non sia più necessaria la memoria allocata dinamicamente deve
-essere esplicitamente rilasciata usando la funzione \func{free},\footnote{le
-  glibc provvedono anche una funzione \func{cfree} definita per compatibilità
+essere esplicitamente rilasciata usando la funzione \funcd{free},\footnote{le
+  glibc provvedono anche una funzione \funcm{cfree} definita per compatibilità
   con SunOS, che è deprecata.} il suo prototipo è:
 
 \begin{funcproto}{ 
@@ -999,7 +1003,7 @@ blocco di dati ridimensionato.
 La \acr{glibc} ha un'implementazione delle funzioni di allocazione che è
 controllabile dall'utente attraverso alcune variabili di ambiente (vedi
 sez.~\ref{sec:proc_environ}), in particolare diventa possibile tracciare
-questo tipo di errori usando la variabile di ambiente \val{MALLOC\_CHECK\_}
+questo tipo di errori usando la variabile di ambiente \envvar{MALLOC\_CHECK\_}
 che quando viene definita mette in uso una versione meno efficiente delle
 funzioni suddette, che però è più tollerante nei confronti di piccoli errori
 come quello dei \itindex{double~free} \textit{double~free} o i
@@ -1074,11 +1078,10 @@ funzioni di libreria una propria versione (che può essere più o meno
 specializzata per il debugging). Esistono varie librerie che forniscono dei
 sostituti opportuni delle funzioni di allocazione in grado, senza neanche
 ricompilare il programma,\footnote{esempi sono \textit{Dmalloc}
-  \href{http://dmalloc.com/}{\textsf{http://dmalloc.com/}} di Gray Watson ed
-  \textit{Electric Fence} di Bruce Perens.} di eseguire diagnostiche anche
-molto complesse riguardo l'allocazione della memoria. Vedremo alcune delle
-funzionalità di ausilio presenti nella \acr{glibc} in
-sez.~\ref{sec:proc_memory_adv_management}.
+  \url{http://dmalloc.com/} di Gray Watson ed \textit{Electric Fence} di Bruce
+  Perens.} di eseguire diagnostiche anche molto complesse riguardo
+l'allocazione della memoria. Vedremo alcune delle funzionalità di ausilio
+presenti nella \acr{glibc} in sez.~\ref{sec:proc_memory_adv_management}.
 
 Una possibile alternativa all'uso di \func{malloc}, per evitare di soffrire
 dei problemi di \itindex{memory~leak} \textit{memory leak} descritti in
@@ -1332,7 +1335,7 @@ automaticamente rimossi se si pone in esecuzione un altro programma con
 
 Il sistema pone dei limiti all'ammontare di memoria di un processo che può
 essere bloccata e al totale di memoria fisica che si può dedicare a questo, lo
-standard POSIX.1 richiede che sia definita in \file{unistd.h} la macro
+standard POSIX.1 richiede che sia definita in \headfile{unistd.h} la macro
 \macro{\_POSIX\_MEMLOCK\_RANGE} per indicare la capacità di eseguire il
 \textit{memory locking}.
 
@@ -1536,9 +1539,9 @@ cosa che non è detto accada con altre implementazioni.
 Nessuna delle due funzioni ha una chiara standardizzazione e nessuna delle due
 compare in POSIX.1, inoltre ci sono indicazioni discordi sui file che ne
 contengono la definizione;\footnote{secondo SUSv2 \func{valloc} è definita in
-  \texttt{stdlib.h}, mentre sia le \acr{glibc} che le precedenti \acr{libc4} e
-  \acr{libc5} la dichiarano in \texttt{malloc.h}, lo stesso vale per
-  \func{memalign} che in alcuni sistemi è dichiarata in \texttt{stdlib.h}.}
+  \headfile{stdlib.h}, mentre sia le \acr{glibc} che le precedenti \acr{libc4}
+  e \acr{libc5} la dichiarano in \headfile{malloc.h}, lo stesso vale per
+  \func{memalign} che in alcuni sistemi è dichiarata in \headfile{stdlib.h}.}
 per questo motivo il loro uso è sconsigliato, essendo state sostituite dalla
 nuova \funcd{posix\_memalign}, che è stata standardizzata in POSIX.1d; il suo
 prototipo è:
@@ -1583,8 +1586,8 @@ allocazione,\footnote{entrambe queste operazioni causano in genere la
 
 Abbiamo visto in sez.~\ref{sec:proc_mem_lock} come una prima funzionalità di
 ausilio nella ricerca di questi errori sia l'uso della variabile di ambiente
-\var{MALLOC\_CHECK\_}.  Una modalità alternativa per effettuare dei controlli
-di consistenza sullo stato delle allocazioni di memoria eseguite con
+\envvar{MALLOC\_CHECK\_}.  Una modalità alternativa per effettuare dei
+controlli di consistenza sullo stato delle allocazioni di memoria eseguite con
 \func{malloc}, anche questa fornita come estensione specifica (e non standard)
 della \acr{glibc}, è quella di utilizzare la funzione \funcd{mcheck}, che deve
 essere chiamata prima di eseguire qualunque allocazione con \func{malloc}; il
@@ -1690,7 +1693,7 @@ operazioni.
 Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
 vengono lanciati e come accennato in sez.~\ref{sec:proc_main} questo viene
 effettuato attraverso gli argomenti \param{argc} e \param{argv} ricevuti nella
-funzione \func{main} all'avvio del programma. Questi argomenti vengono passati
+funzione \code{main} all'avvio del programma. Questi argomenti vengono passati
 al programma dalla shell o dal processo che esegue la \func{exec} (secondo le
 modalità che vedremo in sez.~\ref{sec:proc_exec}) quando questo viene messo in
 esecuzione.
@@ -1777,7 +1780,7 @@ in \param{argv} la libreria standard del C fornisce la funzione
 \fhead{unistd.h} 
 \fdecl{int getopt(int argc, char * const argv[], const char *optstring)}
 \fdesc{Esegue la scansione delle opzioni negli argomenti della funzione
-  \func{main}.} 
+  \code{main}.} 
 }
 {Ritorna il carattere che segue l'opzione, ``\texttt{:}'' se manca un
   parametro all'opzione, ``\texttt{?}'' se l'opzione è sconosciuta, e $-1$ se
@@ -1785,7 +1788,7 @@ in \param{argv} la libreria standard del C fornisce la funzione
 \end{funcproto}
 
 Questa funzione prende come argomenti le due variabili \param{argc} e
-\param{argv} che devono essere quelle passate come argomenti di \func{main}
+\param{argv} che devono essere quelle passate come argomenti di \code{main}
 all'esecuzione del programma, ed una stringa \param{optstring} che indica
 quali sono le opzioni valide. La funzione effettua la scansione della lista
 degli argomenti ricercando ogni stringa che comincia con il carattere
@@ -1831,7 +1834,7 @@ inoltre inizializza alcune \index{variabili!globali} variabili globali:
 \end{itemize*}
 
 In fig.~\ref{fig:proc_options_code} si è mostrata la sezione del programma
-\file{ForkTest.c}, che useremo nel prossimo capitolo per effettuare dei test
+\file{fork\_test.c}, che useremo nel prossimo capitolo per effettuare dei test
 sulla creazione dei processi, deputata alla decodifica delle opzioni a riga di
 comando da esso supportate.
 
@@ -1945,17 +1948,18 @@ configurazione. É di norma cura della shell, quando esegue un comando, passare
 queste variabili al programma messo in esecuzione attraverso un uso opportuno
 delle relative chiamate (si veda sez.~\ref{sec:proc_exec}).
 
-La shell ad esempio ne usa molte per il suo funzionamento, come \texttt{PATH}
+La shell ad esempio ne usa molte per il suo funzionamento, come \envvar{PATH}
 per indicare la lista delle directory in cui effettuare la ricerca dei comandi
-o \texttt{PS1} per impostare il proprio \textit{prompt}. Alcune di esse, come
-\texttt{HOME}, \texttt{USER}, ecc. sono invece definite al login (per i
+o \envvar{PS1} per impostare il proprio \textit{prompt}. Alcune di esse, come
+\envvar{HOME}, \envvar{USER}, ecc. sono invece definite al login (per i
 dettagli si veda sez.~\ref{sec:sess_login}), ed in genere è cura della propria
 distribuzione definire le opportune variabili di ambiente in uno script di
 avvio. Alcune servono poi come riferimento generico per molti programmi, come
-\texttt{EDITOR} che indica l'editor preferito da invocare in caso di
-necessità. Una in particolare, \texttt{LANG}, serve a controllare la
-localizzazione del programma (su cui torneremo in
-sez.~\ref{sec:proc_localization}) per adattarlo alla lingua ed alle convezioni
+\envvar{EDITOR} che indica l'editor preferito da invocare in caso di
+necessità. Una in particolare, \envvar{LANG}, serve a controllare la
+localizzazione del programma 
+%(su cui torneremo in sez.~\ref{sec:proc_localization}) 
+per adattarlo alla lingua ed alle convezioni
 dei vari paesi.
 
 Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le più
@@ -2180,20 +2184,20 @@ versione ``\textsl{sicura}'' da zero.
 \index{variabili!di~ambiente|)}
 
 
-\subsection{La localizzazione}
-\label{sec:proc_localization}
+\subsection{La localizzazione}
+\label{sec:proc_localization}
 
-Abbiamo accennato in sez.~\ref{sec:proc_environ} come la variabile di ambiente
-\texttt{LANG} sia usata per indicare ai processi il valore della cosiddetta
-\textsl{localizzazione}. Si tratta di una funzionalità fornita dalle librerie
-di sistema\footnote{prenderemo in esame soltanto il caso della \acr{glibc}.}
-che consente di gestire in maniera automatica sia la lingua in cui vengono
-stampati i vari messaggi (come i messaggi associati agli errori che vedremo in
-sez.~\ref{sec:sys_strerror}) che le convenzioni usate nei vari paesi per una
-serie di aspetti come il formato dell'ora, quello delle date, gli ordinamenti
-alfabetici, le espressioni della valute, ecc.
+Abbiamo accennato in sez.~\ref{sec:proc_environ} come la variabile di ambiente
+% \envvar{LANG} sia usata per indicare ai processi il valore della cosiddetta
+\textsl{localizzazione}. Si tratta di una funzionalità fornita dalle librerie
+di sistema\footnote{prenderemo in esame soltanto il caso della \acr{glibc}.}
+che consente di gestire in maniera automatica sia la lingua in cui vengono
+stampati i vari messaggi (come i messaggi associati agli errori che vedremo in
+sez.~\ref{sec:sys_strerror}) che le convenzioni usate nei vari paesi per una
+serie di aspetti come il formato dell'ora, quello delle date, gli ordinamenti
+alfabetici, le espressioni della valute, ecc.
 
-Da finire.
+Da finire.
 
 % La localizzazione di un programma si può selezionare con la 
 
@@ -2327,7 +2331,7 @@ adeguati.  L'uso di una \textit{variadic function} prevede quindi tre punti:
 
 Lo standard ISO C prevede che una \textit{variadic function} abbia sempre
 almeno un argomento fisso. Prima di effettuare la dichiarazione deve essere
-incluso l'apposito \textit{header file} \file{stdarg.h}; un esempio di
+incluso l'apposito \textit{header file} \headfile{stdarg.h}; un esempio di
 dichiarazione è il prototipo della funzione \func{execl} che vedremo in
 sez.~\ref{sec:proc_exec}:
 \includecodesnip{listati/exec_sample.c}
@@ -2361,7 +2365,7 @@ pertanto quella sequenziale, in cui vengono estratti dallo \itindex{stack}
 \textit{stack} secondo l'ordine in cui sono stati scritti nel prototipo della
 funzione. 
 
-Per fare questo in \file{stdarg.h} sono definite delle macro specifiche,
+Per fare questo in \headfile{stdarg.h} sono definite delle macro specifiche,
 previste dallo standard ISO C89, che consentono di eseguire questa operazione.
 La prima di queste macro è \macro{va\_start}, che inizializza opportunamente
 una lista degli argomenti, la sua definizione è:
@@ -2758,7 +2762,7 @@ permetterebbe di eseguire questi cambiamenti.
     \includecodesample{listati/endian.c}
   \end{minipage} 
   \normalsize
-  \caption{La funzione \func{endian}, usata per controllare il tipo di
+  \caption{La funzione \samplefunc{endian}, usata per controllare il tipo di
     architettura della macchina.}
   \label{fig:sock_endian_code}
 \end{figure}