Rifinitura degli indici, correzioni ortografiche varie.
[gapil.git] / signal.tex
index 7cbda4f9ae2bef49a47f19251e5cfd504a544ece..0b497d8033b5052347507c3b6c1c7d3d2d0a9b5c 100644 (file)
@@ -1,3 +1,13 @@
+%% signal.tex
+%%
+%% Copyright (C) 2000-2002 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 "Prefazione",
+%% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
+%% license is included in the section entitled "GNU Free Documentation
+%% License".
+%%
 \chapter{I segnali}
 \label{cha:signals}
 
@@ -228,7 +238,7 @@ nuova specificazione saranno notificati).
 
 Una volta che un segnale viene notificato (che questo avvenga subito o dopo
 una attesa più o meno lunga) viene eseguita l'azione specificata per il
-segnale. Per alcuni segnali (\macro{SIGKILL} e \macro{SIGSTOP}) questa azione
+segnale. Per alcuni segnali (\const{SIGKILL} e \const{SIGSTOP}) questa azione
 è fissa e non può essere cambiata, ma per tutti gli altri si può selezionare
 una  delle tre possibilità seguenti:
 
@@ -286,7 +296,7 @@ nomi, che sono standardizzati e sostanzialmente uniformi rispetto alle varie
 implementazioni, che si devono usare nei programmi. Tutti i nomi e le funzioni
 che concernono i segnali sono definiti nell'header di sistema \file{signal.h}.
 
-Il numero totale di segnali presenti è dato dalla macro \macro{NSIG}, e dato
+Il numero totale di segnali presenti è dato dalla macro \const{NSIG}, e dato
 che i numeri dei segnali sono allocati progressivamente, essa corrisponde
 anche al successivo del valore numerico assegnato all'ultimo segnale definito.
 In \tabref{tab:sig_signal_list} si è riportato l'elenco completo dei segnali
@@ -356,49 +366,50 @@ stato dello stack e delle variabili al momento della ricezione del segnale.
     \textbf{Segnale} &\textbf{Standard}&\textbf{Azione}&\textbf{Descrizione} \\
     \hline
     \hline
-    \macro{SIGHUP}   &PL & A & Hangup o terminazione del processo di 
+    \const{SIGHUP}   &PL & A & Hangup o terminazione del processo di 
                                controllo                                     \\
-    \macro{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c})             \\
-    \macro{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y})                  \\
-    \macro{SIGILL}   &PL & C & Istruzione illecita                           \\
-    \macro{SIGABRT}  &PL & C & Segnale di abort da \func{abort}              \\
-    \macro{SIGFPE}   &PL & C & Errore aritmetico                             \\
-    \macro{SIGKILL}  &PL &AEF& Segnale di terminazione forzata               \\
-    \macro{SIGSEGV}  &PL & C & Errore di accesso in memoria                  \\
-    \macro{SIGPIPE}  &PL & A & Pipe spezzata                                 \\
-    \macro{SIGALRM}  &PL & A & Segnale del timer da \func{alarm}             \\
-    \macro{SIGTERM}  &PL & A & Segnale di terminazione \verb|C-\|            \\
-    \macro{SIGUSR1}  &PL & A & Segnale utente numero 1                       \\
-    \macro{SIGUSR2}  &PL & A & Segnale utente numero 2                       \\
-    \macro{SIGCHLD}  &PL & B & Figlio terminato o fermato                    \\
-    \macro{SIGCONT}  &PL &   & Continua se fermato                           \\
-    \macro{SIGSTOP}  &PL &DEF& Ferma il processo                             \\
-    \macro{SIGTSTP}  &PL & D & Pressione del tasto di stop sul terminale     \\
-    \macro{SIGTTIN}  &PL & D & Input sul terminale per un processo 
+    \const{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c})             \\
+    \const{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y})                  \\
+    \const{SIGILL}   &PL & C & Istruzione illecita                           \\
+    \const{SIGABRT}  &PL & C & Segnale di abort da \func{abort}              \\
+    \const{SIGFPE}   &PL & C & Errore aritmetico                             \\
+    \const{SIGKILL}  &PL &AEF& Segnale di terminazione forzata               \\
+    \const{SIGSEGV}  &PL & C & Errore di accesso in memoria                  \\
+    \const{SIGPIPE}  &PL & A & Pipe spezzata                                 \\
+    \const{SIGALRM}  &PL & A & Segnale del timer da \func{alarm}             \\
+    \const{SIGTERM}  &PL & A & Segnale di terminazione \verb|C-\|            \\
+    \const{SIGUSR1}  &PL & A & Segnale utente numero 1                       \\
+    \const{SIGUSR2}  &PL & A & Segnale utente numero 2                       \\
+    \const{SIGCHLD}  &PL & B & Figlio terminato o fermato                    \\
+    \const{SIGCONT}  &PL &   & Continua se fermato                           \\
+    \const{SIGSTOP}  &PL &DEF& Ferma il processo                             \\
+    \const{SIGTSTP}  &PL & D & Pressione del tasto di stop sul terminale     \\
+    \const{SIGTTIN}  &PL & D & Input sul terminale per un processo 
                                in background                                 \\
-    \macro{SIGTTOU}  &PL & D & Output sul terminale per un processo          
+    \const{SIGTTOU}  &PL & D & Output sul terminale per un processo          
                                in background                                 \\
-    \macro{SIGBUS}   &SL & C & Errore sul bus (bad memory access)            \\
-    \macro{SIGPOLL}  &SL & A & \textit{Pollable event} (Sys V).  
-                               Sinonimo di \macro{SIGIO}                     \\
-    \macro{SIGPROF}  &SL & A & Timer del profiling scaduto                   \\
-    \macro{SIGSYS}   &SL & C & Argomento sbagliato per una subroutine (SVID) \\
-    \macro{SIGTRAP}  &SL & C & Trappole per un Trace/breakpoint              \\
-    \macro{SIGURG}   &SLB& B & Ricezione di una urgent condition su un socket\\
-    \macro{SIGVTALRM}&SLB& A & Virtual alarm clock                           \\
-    \macro{SIGXCPU}  &SLB& C & Ecceduto il limite sul CPU time               \\
-    \macro{SIGXFSZ}  &SLB& C & Ecceduto il limite sulla dimensione dei file  \\
-    \macro{SIGIOT}   &L  & C & IOT trap. Sinonimo di \macro{SIGABRT}         \\
-    \macro{SIGEMT}   &L  &   &                                               \\
-    \macro{SIGSTKFLT}&L  & A & Errore sullo stack del coprocessore           \\
-    \macro{SIGIO}    &LB & A & L'I/O è possibile (4.2 BSD)                   \\
-    \macro{SIGCLD}   &L  &   & Sinonimo di \macro{SIGCHLD}                   \\
-    \macro{SIGPWR}   &L  & A & Fallimento dell'alimentazione                 \\
-    \macro{SIGINFO}  &L  &   & Sinonimo di \macro{SIGPWR}                    \\
-    \macro{SIGLOST}  &L  & A & Perso un lock sul file (per NFS)              \\
-    \macro{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun)        \\
-    \macro{SIGUNUSED}&L  & A & Segnale inutilizzato (diventerà 
-                               \macro{SIGSYS})                               \\
+    \const{SIGBUS}   &SL & C & Errore sul bus (bad memory access)            \\
+    \const{SIGPOLL}  &SL & A & \textit{Pollable event} (Sys V).  
+                               Sinonimo di \const{SIGIO}                     \\
+    \const{SIGPROF}  &SL & A & Timer del profiling scaduto                   \\
+    \const{SIGSYS}   &SL & C & Argomento sbagliato per una subroutine (SVID) \\
+    \const{SIGTRAP}  &SL & C & Trappole per un Trace/breakpoint              \\
+    \const{SIGURG}   &SLB& B & Ricezione di una \textit{urgent condition} su 
+                               un socket\index{socket}\\
+    \const{SIGVTALRM}&SLB& A & Virtual alarm clock                           \\
+    \const{SIGXCPU}  &SLB& C & Ecceduto il limite sul CPU time               \\
+    \const{SIGXFSZ}  &SLB& C & Ecceduto il limite sulla dimensione dei file  \\
+    \const{SIGIOT}   &L  & C & IOT trap. Sinonimo di \const{SIGABRT}         \\
+    \const{SIGEMT}   &L  &   &                                               \\
+    \const{SIGSTKFLT}&L  & A & Errore sullo stack del coprocessore           \\
+    \const{SIGIO}    &LB & A & L'I/O è possibile (4.2 BSD)                   \\
+    \const{SIGCLD}   &L  &   & Sinonimo di \const{SIGCHLD}                   \\
+    \const{SIGPWR}   &L  & A & Fallimento dell'alimentazione                 \\
+    \const{SIGINFO}  &L  &   & Sinonimo di \const{SIGPWR}                    \\
+    \const{SIGLOST}  &L  & A & Perso un lock sul file (per NFS)              \\
+    \const{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun)        \\
+    \const{SIGUNUSED}&L  & A & Segnale inutilizzato (diventerà 
+                               \const{SIGSYS})                               \\
     \hline
   \end{tabular}
   \caption{Lista dei segnali in Linux.}
@@ -421,11 +432,11 @@ proibita) e l'esecuzione non pu
 
 In genere si intercettano questi segnali per permettere al programma di
 terminare in maniera pulita, ad esempio per ripristinare le impostazioni della
-console o eliminare i file di lock prima dell'uscita.  In questo caso il
-gestore deve concludersi ripristinando l'azione predefinita e rialzando il
-segnale, in questo modo il programma si concluderà senza effetti spiacevoli,
-ma riportando lo stesso stato di uscita che avrebbe avuto se il gestore non ci
-fosse stato.
+console o eliminare i file di lock\index{file!di lock} prima dell'uscita.  In
+questo caso il gestore deve concludersi ripristinando l'azione predefinita e
+rialzando il segnale, in questo modo il programma si concluderà senza effetti
+spiacevoli, ma riportando lo stesso stato di uscita che avrebbe avuto se il
+gestore non ci fosse stato.
 
 L'azione predefinita per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
@@ -436,7 +447,7 @@ al momento della terminazione.
 
 Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
+\item[\const{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
   aritmetici compresa la divisione per zero e l'overflow. 
   
@@ -448,7 +459,7 @@ Questi segnali sono:
 %   standard IEEE per le operazioni in virgola mobile definisce varie eccezioni
 %   aritmetiche e richiede che esse siano notificate.  
   
-\item[\macro{SIGILL}] Il nome deriva da \textit{illegal instruction},
+\item[\const{SIGILL}] Il nome deriva da \textit{illegal instruction},
   significa che il programma sta cercando di eseguire una istruzione
   privilegiata o inesistente, in generale del codice illecito. Poiché il
   compilatore del C genera del codice valido si ottiene questo segnale se il
@@ -459,7 +470,7 @@ Questi segnali sono:
   generato in caso di overflow dello stack o di problemi nell'esecuzione di un
   gestore. Se il gestore ritorna il comportamento del processo è
   indefinito.
-\item[\macro{SIGSEGV}] Il nome deriva da \textit{segment violation}, e
+\item[\const{SIGSEGV}] Il nome deriva da \textit{segment violation}, e
   significa che il programma sta cercando di leggere o scrivere in una zona di
   memoria protetta al di fuori di quella che gli è stata riservata dal
   sistema. In genere è il meccanismo della protezione della memoria che si
@@ -468,20 +479,20 @@ Questi segnali sono:
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
-\item[\macro{SIGBUS}] Il nome deriva da \textit{bus error}. Come
-  \macro{SIGSEGV} questo è un segnale che viene generato di solito quando si
+\item[\const{SIGBUS}] Il nome deriva da \textit{bus error}. Come
+  \const{SIGSEGV} questo è un segnale che viene generato di solito quando si
   dereferenzia un puntatore non inizializzato, la differenza è che
-  \macro{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
-  (tipo fuori dallo heap o dallo stack), mentre \macro{SIGBUS} indica
+  \const{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
+  (tipo fuori dallo heap o dallo stack), mentre \const{SIGBUS} indica
   l'accesso ad un indirizzo non valido, come nel caso di un puntatore non
   allineato.
-\item[\macro{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica che
+\item[\const{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica che
   il programma stesso ha rilevato un errore che viene riportato chiamando la
   funzione \func{abort} che genera questo segnale.
-\item[\macro{SIGTRAP}] È il segnale generato da un'istruzione di breakpoint o
+\item[\const{SIGTRAP}] È il segnale generato da un'istruzione di breakpoint o
   dall'attivazione del tracciamento per il processo. È usato dai programmi per
   il debugging e se un programma normale non dovrebbe ricevere questo segnale.
-\item[\macro{SIGSYS}] Sta ad indicare che si è eseguita una istruzione che
+\item[\const{SIGSYS}] Sta ad indicare che si è eseguita una istruzione che
   richiede l'esecuzione di una system call, ma si è fornito un codice
   sbagliato per quest'ultima.
 \end{basedescript}
@@ -504,15 +515,15 @@ periferica).
 L'azione predefinita di questi segnali è di terminare il processo, questi
 segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGTERM}] Il nome sta per \textit{terminate}. È un segnale
+\item[\const{SIGTERM}] Il nome sta per \textit{terminate}. È un segnale
   generico usato per causare la conclusione di un programma. Al contrario di
-  \macro{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si
+  \const{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si
   usa per chiedere in maniera ``educata'' ad un processo di concludersi.
-\item[\macro{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
+\item[\const{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
   interruzione per il programma. È quello che viene generato di default dal
   comando \cmd{kill} o dall'invio sul terminale del carattere di controllo
-  INTR (interrupt, generato dalla sequenza \macro{C-c}).
-\item[\macro{SIGQUIT}] È analogo a \macro{SIGINT} con la differenze che è
+  INTR (interrupt, generato dalla sequenza \cmd{C-c}).
+\item[\const{SIGQUIT}] È analogo a \const{SIGINT} con la differenze che è
   controllato da un'altro carattere di controllo, QUIT, corrispondente alla
   sequenza \verb|C-\|. A differenza del precedente l'azione predefinita, oltre
   alla terminazione del processo, comporta anche la creazione di un core dump.
@@ -523,21 +534,21 @@ segnali sono:
   normalmente previste (tipo la cancellazione di file temporanei), dato che in
   certi casi esse possono eliminare informazioni utili nell'esame dei core
   dump. 
-\item[\macro{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
+\item[\const{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
   qualunque programma. Questo segnale non può essere né intercettato, né
   ignorato, né bloccato, per cui causa comunque la terminazione del processo.
   In genere esso viene generato solo per richiesta esplicita dell'utente dal
   comando (o tramite la funzione) \cmd{kill}. Dato che non lo si può
   intercettare è sempre meglio usarlo come ultima risorsa quando metodi meno
-  brutali, come \macro{SIGTERM} o \macro{C-c} non funzionano. 
+  brutali, come \const{SIGTERM} o \cmd{C-c} non funzionano. 
 
-  Se un processo non risponde a nessun altro segnale \macro{SIGKILL} ne causa
+  Se un processo non risponde a nessun altro segnale \const{SIGKILL} ne causa
   sempre la terminazione (in effetti il fallimento della terminazione di un
-  processo da parte di \macro{SIGKILL} costituirebbe un malfunzionamento del
+  processo da parte di \const{SIGKILL} costituirebbe un malfunzionamento del
   kernel). Talvolta è il sistema stesso che può generare questo segnale quando
   per condizioni particolari il processo non può più essere eseguito neanche
   per eseguire un gestore.
-\item[\macro{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
+\item[\const{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
   terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la
   rete). Viene usato anche per riportare la terminazione del processo di
   controllo di un terminale a tutti i processi della sessione, in modo che
@@ -557,13 +568,13 @@ predefinito 
 segnali la scelta predefinita è irrilevante, in quanto il loro uso presuppone
 sempre la necessità di un gestore.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
+\item[\const{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
   un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente
   usato dalla funzione \func{alarm}.
-\item[\macro{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
+\item[\const{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
   precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
   processo. 
-\item[\macro{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
+\item[\const{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
   di un timer che misura sia il tempo di CPU speso direttamente dal processo
   che quello che il sistema ha speso per conto di quest'ultimo. In genere
   viene usato dagli strumenti che servono a fare la profilazione dell'utilizzo
@@ -580,14 +591,15 @@ generare questi segnali.
 
 L'azione predefinita è di essere ignorati. Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGIO}] Questo segnale viene inviato quando un file descriptor è
-  pronto per eseguire dell'input/output. In molti sistemi solo i socket e i
-  terminali possono generare questo segnale, in Linux questo può essere usato
-  anche per i file, posto che la \func{fcntl} abbia avuto successo.
-\item[\macro{SIGURG}] Questo segnale è inviato quando arrivano dei dati
-  urgenti o \textit{out of band} su di un socket; per maggiori dettagli al
-  proposito si veda \secref{sec:xxx_urgent_data}.
-\item[\macro{SIGPOLL}] Questo segnale è equivalente a \macro{SIGIO}, è
+\item[\const{SIGIO}] Questo segnale viene inviato quando un file descriptor è
+  pronto per eseguire dell'input/output. In molti sistemi solo i
+  socket\index{socket} e i terminali possono generare questo segnale, in Linux
+  questo può essere usato anche per i file, posto che la \func{fcntl} abbia
+  avuto successo.
+\item[\const{SIGURG}] Questo segnale è inviato quando arrivano dei dati
+  urgenti o \textit{out of band} su di un socket\index{socket}; per maggiori
+  dettagli al proposito si veda \secref{sec:xxx_urgent_data}.
+\item[\const{SIGPOLL}] Questo segnale è equivalente a \const{SIGIO}, è
   definito solo per compatibilità con i sistemi System V.
 \end{basedescript}
 
@@ -599,14 +611,14 @@ Questi sono i segnali usati dal controllo delle sessioni e dei processi, il
 loro uso è specifico e viene trattato in maniera specifica nelle sezioni in
 cui si trattano gli argomenti relativi.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
+\item[\const{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
   figlio termina o viene fermato. L'azione predefinita è di ignorare il
   segnale, la sua gestione è trattata in \secref{sec:proc_wait}.
-\item[\macro{SIGCLD}] Per Linux questo è solo un segnale identico al
+\item[\const{SIGCLD}] Per Linux questo è solo un segnale identico al
   precedente, il nome è obsoleto e andrebbe evitato. 
-\item[\macro{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
+\item[\const{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
   usato per fare ripartire un programma precedentemente fermato da
-  \macro{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
+  \const{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
   ripartire il processo prima della sua consegna. Il comportamento predefinito
   è di fare solo questo; il segnale non può essere bloccato. Si può anche
   installare un gestore, ma il segnale provoca comunque il riavvio del
@@ -618,23 +630,23 @@ cui si trattano gli argomenti relativi.  Questi segnali sono:
   gestori per far si che un programma produca una qualche azione speciale
   se viene fermato e riavviato, come per esempio riscrivere un prompt, o
   inviare un avviso. 
-\item[\macro{SIGSTOP}] Il segnale ferma un processo (lo porta cioè in uno
+\item[\const{SIGSTOP}] Il segnale ferma un processo (lo porta cioè in uno
   stato di sleep, vedi \secref{sec:proc_sched}); il segnale non può essere né
   intercettato, né ignorato, né bloccato.
-\item[\macro{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
+\item[\const{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
   ferma il processo interattivamente, ed è generato dal carattere SUSP
   (prodotto dalla combinazione \cmd{C-z}), ed al contrario di
-  \macro{SIGSTOP} può essere intercettato e ignorato. In genere un programma
+  \const{SIGSTOP} può essere intercettato e ignorato. In genere un programma
   installa un gestore per questo segnale quando vuole lasciare il sistema
   o il terminale in uno stato definito prima di fermarsi; se per esempio un
   programma ha disabilitato l'eco sul terminale può installare un gestore
   per riabilitarlo prima di fermarsi.
-\item[\macro{SIGTTIN}] Un processo non può leggere dal terminale se esegue una
+\item[\const{SIGTTIN}] Un processo non può leggere dal terminale se esegue una
   sessione di lavoro in \textit{background}. Quando un processo in background
   tenta di leggere da un terminale viene inviato questo segnale a tutti i
   processi della sessione di lavoro. L'azione predefinita è di fermare il
   processo.  L'argomento è trattato in \secref{sec:sess_job_control_overview}.
-\item[\macro{SIGTTOU}] Segnale analogo al precedente \macro{SIGTTIN}, ma
+\item[\const{SIGTTOU}] Segnale analogo al precedente \const{SIGTTIN}, ma
   generato quando si tenta di scrivere o modificare uno dei modi del
   terminale. L'azione predefinita è di fermare il processo, l'argomento è
   trattato in \secref{sec:sess_job_control_overview}.
@@ -652,20 +664,20 @@ resto del sistema.
 L'azione predefinita di questi segnali è di terminare il processo, questi
 segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle pipe o
+\item[\const{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle pipe o
   delle FIFO è necessario che, prima che un processo inizi a scrivere su di
   essa, un'altro abbia aperto la pipe in lettura (si veda
   \secref{sec:ipc_pipes}). Se il processo in lettura non è partito o è
   terminato inavvertitamente alla scrittura sulla pipe il kernel genera questo
   segnale. Se il segnale è bloccato, intercettato o ignorato la chiamata che
-  lo ha causato fallisce restituendo l'errore \macro{EPIPE} 
-\item[\macro{SIGLOST}] Sta per \textit{Resource lost}. Viene generato quando
+  lo ha causato fallisce restituendo l'errore \errcode{EPIPE} 
+\item[\const{SIGLOST}] Sta per \textit{Resource lost}. Viene generato quando
   c'è un advisory lock su un file NFS, ed il server riparte dimenticando la
   situazione precedente.
-\item[\macro{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. Questo
+\item[\const{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. Questo
   segnale è generato quando un processo eccede il limite impostato per il
   tempo di CPU disponibile, vedi \secref{sec:sys_resource_limit}. 
-\item[\macro{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo
+\item[\const{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo
   segnale è generato quando un processo tenta di estendere un file oltre le
   dimensioni specificate dal limite impostato per le dimensioni massime di un
   file, vedi \secref{sec:sys_resource_limit}. 
@@ -678,18 +690,18 @@ segnali sono:
 Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non
 classificabili in maniera omogenea. Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SIGUSR1}] Vedi \macro{SIGUSR2}.
-\item[\macro{SIGUSR2}] Insieme a \macro{SIGUSR1} è un segnale a disposizione
+\item[\const{SIGUSR1}] Vedi \const{SIGUSR2}.
+\item[\const{SIGUSR2}] Insieme a \const{SIGUSR1} è un segnale a disposizione
   dell'utente che li può usare per quello che vuole. Possono essere utili per
   implementare una comunicazione elementare fra processi diversi, o per
   eseguire a richiesta una operazione utilizzando un gestore. L'azione
   predefinita è di terminare il processo.
-\item[\macro{SIGWINCH}] Il nome sta per \textit{window (size) change} e viene
+\item[\const{SIGWINCH}] Il nome sta per \textit{window (size) change} e viene
   generato in molti sistemi (GNU/Linux compreso) quando le dimensioni (in
   righe e colonne) di un terminale vengono cambiate. Viene usato da alcuni
   programmi testuali per riformattare l'uscita su schermo quando si cambia
   dimensione a quest'ultimo. L'azione predefinita è di essere ignorato.
-\item[\macro{SIGINFO}] Il segnale indica una richiesta di informazioni. È
+\item[\const{SIGINFO}] Il segnale indica una richiesta di informazioni. È
   usato con il controllo di sessione, causa la stampa di informazioni da parte
   del processo leader del gruppo associato al terminale di controllo, gli
   altri processi lo ignorano.
@@ -769,14 +781,14 @@ segnali dovuti alle sue azioni.
 
 Quando si mette in esecuzione un nuovo programma con \func{exec} (si ricordi
 quanto detto in \secref{sec:proc_exec}) tutti i segnali per i quali è stato
-installato un gestore vengono reimpostati a \macro{SIG\_DFL}. Non ha più
+installato un gestore vengono reimpostati a \const{SIG\_DFL}. Non ha più
 senso infatti fare riferimento a funzioni definite nel programma originario,
 che non sono presenti nello spazio di indirizzi del nuovo programma.
 
 Si noti che questo vale solo per le azioni per le quali è stato installato un
 gestore; viene mantenuto invece ogni eventuale impostazione dell'azione a
-\macro{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad
-\macro{SIG\_IGN} le risposte per \macro{SIGINT} e \macro{SIGQUIT} per i
+\const{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad
+\const{SIG\_IGN} le risposte per \const{SIGINT} e \const{SIGQUIT} per i
 programmi eseguiti in background, che altrimenti sarebbero interrotti da una
 successiva pressione di \texttt{C-c} o \texttt{C-y}.
 
@@ -797,7 +809,8 @@ eseguito prima che la system call sia ritornata.  Un elenco dei casi in cui si
 presenta questa situazione è il seguente:
 \begin{itemize}
 \item la lettura da file che possono bloccarsi in attesa di dati non ancora
-  presenti (come per certi file di dispositivo, i socket o le pipe).
+  presenti (come per certi file di dispositivo\index{file!di dispositivo}, i
+  socket\index{socket} o le pipe).
 \item la scrittura sugli stessi file, nel caso in cui dati non possano essere
   accettati immediatamente.
 \item l'apertura di un file di dispositivo che richiede operazioni non
@@ -813,7 +826,7 @@ presenta questa situazione 
 
 In questo caso si pone il problema di cosa fare una volta che il gestore
 sia ritornato. La scelta originaria dei primi Unix era quella di far ritornare
-anche la system call restituendo l'errore di \macro{EINTR}. Questa è a
+anche la system call restituendo l'errore di \errcode{EINTR}. Questa è a
 tutt'oggi una scelta corrente, ma comporta che i programmi che usano dei
 gestori controllino lo stato di uscita delle funzioni per ripeterne la
 chiamata qualora l'errore fosse questo.
@@ -822,7 +835,7 @@ Dimenticarsi di richiamare una system call interrotta da un segnale 
 errore comune, tanto che le \acr{glibc} provvedono una macro
 \code{TEMP\_FAILURE\_RETRY(expr)} che esegue l'operazione automaticamente,
 ripetendo l'esecuzione dell'espressione \var{expr} fintanto che il risultato
-non è diverso dall'uscita con un errore \macro{EINTR}.
+non è diverso dall'uscita con un errore \errcode{EINTR}.
 
 La soluzione è comunque poco elegante e BSD ha scelto un approccio molto
 diverso, che è quello di fare ripartire automaticamente la system call invece
@@ -857,7 +870,7 @@ comportamento, pur mantenendone immutato il prototipo\footnote{in realt
   segnale \param{signum}.
   
   \bodydesc{La funzione ritorna il precedente gestore in caso di successo
-    o \macro{SIG\_ERR} in caso di errore.}
+    o \const{SIG\_ERR} in caso di errore.}
 \end{prototype}
 
 In questa definizione si è usato un tipo di dato, \type{sighandler\_t}, che è
@@ -888,15 +901,15 @@ Il numero di segnale passato in \param{signum} pu
 direttamente con una delle costanti definite in \secref{sec:sig_standard}. Il
 gestore \param{handler} invece, oltre all'indirizzo della funzione da chiamare
 all'occorrenza del segnale, può assumere anche i due valori costanti
-\macro{SIG\_IGN} con cui si dice ignorare il segnale e \macro{SIG\_DFL} per
+\const{SIG\_IGN} con cui si dice ignorare il segnale e \const{SIG\_DFL} per
 reinstallare l'azione predefinita.\footnote{si ricordi però che i due segnali
-  \macro{SIGKILL} e \macro{SIGSTOP} non possono essere ignorati né
+  \const{SIGKILL} e \const{SIGSTOP} non possono essere ignorati né
   intercettati.}
 
 La funzione restituisce l'indirizzo dell'azione precedente, che può essere
 salvato per poterlo ripristinare (con un'altra chiamata a \func{signal}) in un
-secondo tempo. Si ricordi che se si imposta come azione \macro{SIG\_IGN} (o si
-imposta un \macro{SIG\_DFL} per un segnale la cui azione predefinita è di
+secondo tempo. Si ricordi che se si imposta come azione \const{SIG\_IGN} (o si
+imposta un \const{SIG\_DFL} per un segnale la cui azione predefinita è di
 essere ignorato), tutti i segnali pendenti saranno scartati, e non verranno
 mai notificati.
 
@@ -915,8 +928,8 @@ In generale, per evitare questi problemi, tutti i nuovi programmi dovrebbero
 usare \func{sigaction}.
 
 È da tenere presente che, seguendo lo standard POSIX, il comportamento di un
-processo che ignora i segnali \macro{SIGFPE}, \macro{SIGILL}, o
-\macro{SIGSEGV} (qualora non originino da una \func{kill} o una \func{raise})
+processo che ignora i segnali \const{SIGFPE}, \const{SIGILL}, o
+\const{SIGSEGV} (qualora non originino da una \func{kill} o una \func{raise})
 è indefinito. Un gestore che ritorna da questi segnali può dare luogo ad
 un ciclo infinito.
 
@@ -932,7 +945,7 @@ serve per inviare un segnale al processo corrente, ed il suo prototipo 
   Invia il segnale \param{sig} al processo corrente.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, il solo errore restituito è \macro{EINVAL} qualora si sia
+    errore, il solo errore restituito è \errval{EINVAL} qualora si sia
     specificato un numero di segnale invalido.}
 \end{prototype}
 
@@ -954,9 +967,9 @@ la funzione \func{kill}; il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] Il segnale specificato non esiste.
-    \item[\macro{ESRCH}] Il processo selezionato non esiste.
-    \item[\macro{EPERM}] Non si hanno privilegi sufficienti ad inviare il
+    \item[\errcode{EINVAL}] Il segnale specificato non esiste.
+    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
+    \item[\errcode{EPERM}] Non si hanno privilegi sufficienti ad inviare il
       segnale.
     \end{errlist}}
 \end{functions}
@@ -964,8 +977,8 @@ la funzione \func{kill}; il cui prototipo 
 Lo standard POSIX prevede che il valore 0 per \param{sig} sia usato per
 specificare il segnale nullo.  Se le funzioni vengono chiamate con questo
 valore non viene inviato nessun segnale, ma viene eseguito il controllo degli
-errori, in tal caso si otterrà un errore \macro{EPERM} se non si hanno i
-permessi necessari ed un errore \macro{ESRCH} se il processo specificato non
+errori, in tal caso si otterrà un errore \errcode{EPERM} se non si hanno i
+permessi necessari ed un errore \errcode{ESRCH} se il processo specificato non
 esiste. Si tenga conto però che il sistema ricicla i \acr{pid} (come accennato
 in \secref{sec:proc_pid}) per cui l'esistenza di un processo non significa che
 esso sia realmente quello a cui si intendeva mandare il segnale.
@@ -1016,7 +1029,7 @@ Solo l'amministratore pu
 tutti gli altri casi l'userid reale o l'userid effettivo del processo
 chiamante devono corrispondere all'userid reale o all'userid salvato della
 destinazione. Fa eccezione il caso in cui il segnale inviato sia
-\macro{SIGCONT}, nel quale occorre che entrambi i processi appartengano alla
+\const{SIGCONT}, nel quale occorre che entrambi i processi appartengano alla
 stessa sessione. Inoltre, dato il ruolo fondamentale che riveste nel sistema
 (si ricordi quanto visto in \secref{sec:sig_termination}), non è possibile
 inviare al processo 1 (cioè a \cmd{init}) segnali per i quali esso non abbia
@@ -1034,12 +1047,12 @@ segnale al processo che ha effettuato la chiamata.
 \label{sec:sig_alarm_abort}
 
 Un caso particolare di segnali generati a richiesta è quello che riguarda i
-vari segnali di temporizzazione e \macro{SIGABRT}, per ciascuno di questi
+vari segnali di temporizzazione e \const{SIGABRT}, per ciascuno di questi
 segnali sono previste funzioni specifiche che ne effettuino l'invio. La più
 comune delle funzioni usate per la temporizzazione è \func{alarm} il cui
 prototipo è:
 \begin{prototype}{unistd.h}{unsigned int alarm(unsigned int seconds)}
-  Predispone l'invio di \macro{SIGALRM} dopo \param{seconds} secondi.
+  Predispone l'invio di \const{SIGALRM} dopo \param{seconds} secondi.
   
   \bodydesc{La funzione restituisce il numero di secondi rimanenti ad un
     precedente allarme, o zero se non c'erano allarmi pendenti.}
@@ -1048,7 +1061,7 @@ prototipo 
 La funzione fornisce un meccanismo che consente ad un processo di predisporre
 un'interruzione nel futuro, (ad esempio per effettuare una qualche operazione
 dopo un certo periodo di tempo), programmando l'emissione di un segnale (nel
-caso in questione \macro{SIGALRM}) dopo il numero di secondi specificato da
+caso in questione \const{SIGALRM}) dopo il numero di secondi specificato da
 \param{seconds}.
 
 Se si specifica per \param{seconds} un valore nullo non verrà inviato nessun
@@ -1068,15 +1081,15 @@ processo tre diversi timer:
 \begin{itemize}
 \item un \textit{real-time timer} che calcola il tempo reale trascorso (che
   corrisponde al \textit{clock time}). La scadenza di questo timer provoca
-  l'emissione di \macro{SIGALRM}.
+  l'emissione di \const{SIGALRM}.
 \item un \textit{virtual timer} che calcola il tempo di processore usato dal
   processo in user space (che corrisponde all'\textit{user time}). La scadenza
-  di questo timer provoca l'emissione di \macro{SIGVTALRM}.
+  di questo timer provoca l'emissione di \const{SIGVTALRM}.
 \item un \textit{profiling timer} che calcola la somma dei tempi di processore
   utilizzati direttamente dal processo in user space, e dal kernel nelle
   system call ad esso relative (che corrisponde a quello che in
   \secref{sec:sys_unix_time} abbiamo chiamato \textit{CPU time}). La scadenza
-  di questo timer provoca l'emissione di \macro{SIGPROF}.
+  di questo timer provoca l'emissione di \const{SIGPROF}.
 \end{itemize}
 
 Il timer usato da \func{alarm} è il \textit{clock time}, e corrisponde cioè al
@@ -1096,8 +1109,8 @@ suo prototipo 
   \param{value} sul timer specificato da \func{which}.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà uno dei valori \macro{EINVAL} o
-    \macro{EFAULT}.}
+    errore, nel qual caso \var{errno} assumerà uno dei valori \errval{EINVAL} o
+    \errval{EFAULT}.}
 \end{prototype}
 
 Il valore di \param{which} permette di specificare quale dei tre timer
@@ -1111,9 +1124,9 @@ illustrati in precedenza usare; i possibili valori sono riportati in
     \textbf{Valore} & \textbf{Timer} \\
     \hline
     \hline
-    \macro{ITIMER\_REAL}    & \textit{real-time timer}\\
-    \macro{ITIMER\_VIRTUAL} & \textit{virtual timer}\\
-    \macro{ITIMER\_PROF}    & \textit{profiling timer}\\
+    \const{ITIMER\_REAL}    & \textit{real-time timer}\\
+    \const{ITIMER\_VIRTUAL} & \textit{virtual timer}\\
+    \const{ITIMER\_PROF}    & \textit{profiling timer}\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{which} per la funzione
@@ -1193,7 +1206,7 @@ effettuato per eccesso).
 
 Una seconda causa di potenziali ritardi è che il segnale viene generato alla
 scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo
-è attivo (questo è sempre vero per \macro{ITIMER\_VIRT}) la consegna è
+è attivo (questo è sempre vero per \const{ITIMER\_VIRT}) la consegna è
 immediata, altrimenti può esserci un ulteriore ritardo che può variare a
 seconda del carico del sistema.
 
@@ -1221,14 +1234,14 @@ valore corrente di un timer senza modificarlo, 
 
 L'ultima funzione che permette l'invio diretto di un segnale è \func{abort};
 che, come accennato in \ref{sec:proc_termination}, permette di abortire
-l'esecuzione di un programma tramite l'invio di \macro{SIGABRT}. Il suo
+l'esecuzione di un programma tramite l'invio di \const{SIGABRT}. Il suo
 prototipo è:
 \begin{prototype}{stdlib.h}{void abort(void)}
   
   Abortisce il processo corrente.
   
   \bodydesc{La funzione non ritorna, il processo è terminato inviando il
-  segnale di \macro{SIGABRT}.}
+  segnale di \const{SIGABRT}.}
 \end{prototype}
 
 La differenza fra questa funzione e l'uso di \func{raise} è che anche se il
@@ -1258,7 +1271,7 @@ quello di usare la funzione \func{pause}, il cui prototipo 
   
   \bodydesc{La funzione ritorna solo dopo che un segnale è stato ricevuto ed
     il relativo gestore è ritornato, nel qual caso restituisce -1 e
-    \var{errno} assumerà il valore \macro{EINTR}.}
+    \var{errno} assumerà il valore \errval{EINTR}.}
 \end{prototype}
 
 La funzione segnala sempre una condizione di errore (il successo sarebbe
@@ -1289,10 +1302,10 @@ termine per l'attesa, e ricalcolare tutte le volte il numero di secondi da
 aspettare.
 
 In alcune implementazioni inoltre l'uso di \func{sleep} può avere conflitti
-con quello di \macro{SIGALRM}, dato che la funzione può essere realizzata con
+con quello di \const{SIGALRM}, dato che la funzione può essere realizzata con
 l'uso di \func{pause} e \func{alarm} (in maniera analoga all'esempio che
 vedremo in \secref{sec:sig_example}). In tal caso mescolare chiamata di
-\func{alarm} e \func{sleep} o modificare l'azione di \macro{SIGALRM}, può
+\func{alarm} e \func{sleep} o modificare l'azione di \const{SIGALRM}, può
 causare risultati indefiniti. Nel caso delle \acr{glibc} è stata usata una
 implementazione completamente indipendente e questi problemi non ci sono.
 
@@ -1308,12 +1321,12 @@ seguono quella di SUSv2 che prevede il seguente prototipo:
   
   \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in
     caso di errore, nel qual caso \var{errno} assumerà il valore
-    \macro{EINTR}.}
+    \errval{EINTR}.}
 
 \end{prototype}
 
 Anche questa funzione, a seconda delle implementazioni, può presentare
-problemi nell'interazione con \func{alarm} e \macro{SIGALRM}. È pertanto
+problemi nell'interazione con \func{alarm} e \const{SIGALRM}. È pertanto
 deprecata in favore della funzione \func{nanosleep}, definita dallo standard
 POSIX1.b, il cui prototipo è:
 \begin{prototype}{unistd.h}{int nanosleep(const struct timespec *req, struct
@@ -1325,16 +1338,16 @@ POSIX1.b, il cui prototipo 
   \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in
     caso di errore, nel qual caso \var{errno} assumerà uno dei valori: 
     \begin{errlist}
-    \item[\macro{EINVAL}] si è specificato un numero di secondi negativo o un
+    \item[\errcode{EINVAL}] si è specificato un numero di secondi negativo o un
       numero di nanosecondi maggiore di 999.999.999.
-    \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
+    \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
     \end{errlist}}
 \end{prototype}
 
 Lo standard richiede che la funzione sia implementata in maniera del tutto
 indipendente da \func{alarm}\footnote{nel caso di Linux questo è fatto
   utilizzando direttamente il timer del kernel.} e sia utilizzabile senza
-interferenze con l'uso di \macro{SIGALRM}. La funzione prende come parametri
+interferenze con l'uso di \const{SIGALRM}. La funzione prende come parametri
 delle strutture di tipo \var{timespec}, la cui definizione è riportata in
 \figref{fig:sys_timeval_struct}, che permettono di specificare un tempo con
 una precisione (teorica) fino al nanosecondo.
@@ -1349,14 +1362,14 @@ nanosecondo, la precisione di \func{nanosleep} 
 temporale del timer di sistema. Perciò la funzione attenderà comunque il tempo
 specificato, ma prima che il processo possa tornare ad essere eseguito
 occorrerà almeno attendere il successivo giro di scheduler\index{scheduler} e
-cioè un tempo che a seconda dei casi può arrivare fino a 1/\macro{HZ}, (sempre
+cioè un tempo che a seconda dei casi può arrivare fino a 1/\const{HZ}, (sempre
 che il sistema sia scarico ed il processa venga immediatamente rimesso in
 esecuzione); per questo motivo il valore restituito in \param{rem} è sempre
-arrotondato al multiplo successivo di 1/\macro{HZ}.
+arrotondato al multiplo successivo di 1/\const{HZ}.
 
 In realtà è possibile ottenere anche pause più precise del centesimo di
-secondo usando politiche di scheduling real time come \macro{SCHED\_FIFO} o
-\macro{SCHED\_RR}; in tal caso infatti il meccanismo di scheduling ordinario
+secondo usando politiche di scheduling real time come \const{SCHED\_FIFO} o
+\const{SCHED\_RR}; in tal caso infatti il meccanismo di scheduling ordinario
 viene evitato, e si raggiungono pause fino ai 2~ms con precisioni del $\mu$s.
 
 
@@ -1365,30 +1378,30 @@ viene evitato, e si raggiungono pause fino ai 2~ms con precisioni del $\mu$s.
 \label{sec:sig_sigchld}
 
 Un semplice esempio per illustrare il funzionamento di un gestore di segnale è
-quello della gestione di \macro{SIGCHLD}. Abbiamo visto in
+quello della gestione di \const{SIGCHLD}. Abbiamo visto in
 \secref{sec:proc_termination} che una delle azioni eseguite dal kernel alla
 conclusione di un processo è quella di inviare questo segnale al
 padre.\footnote{in realtà in SVr4 eredita la semantica di System V, in cui il
-  segnale si chiama \macro{SIGCLD} e viene trattato in maniera speciale; in
-  System V infatti se si imposta esplicitamente l'azione a \macro{SIG\_IGN} il
-  segnale non viene generato ed il sistema non genera zombie (lo stato di
-  terminazione viene scartato senza dover chiamare una \func{wait}). L'azione
-  predefinita è sempre quella di ignorare il segnale, ma non attiva questo
-  comportamento. Linux, come BSD e POSIX, non supporta questa semantica ed usa
-  il nome di \macro{SIGCLD} come sinonimo di \macro{SIGCHLD}.} In generale
-dunque, quando non interessa elaborare lo stato di uscita di un processo, si
-può completare la gestione della terminazione installando un gestore per
-\macro{SIGCHLD} il cui unico compito sia quello chiamare \func{waitpid} per
-completare la procedura di terminazione in modo da evitare la formazione di
-zombie.
+  segnale si chiama \const{SIGCLD} e viene trattato in maniera speciale; in
+  System V infatti se si imposta esplicitamente l'azione a \const{SIG\_IGN} il
+  segnale non viene generato ed il sistema non genera zombie\index{zombie} (lo
+  stato di terminazione viene scartato senza dover chiamare una \func{wait}).
+  L'azione predefinita è sempre quella di ignorare il segnale, ma non attiva
+  questo comportamento. Linux, come BSD e POSIX, non supporta questa semantica
+  ed usa il nome di \const{SIGCLD} come sinonimo di \const{SIGCHLD}.} In
+generale dunque, quando non interessa elaborare lo stato di uscita di un
+processo, si può completare la gestione della terminazione installando un
+gestore per \const{SIGCHLD} il cui unico compito sia quello chiamare
+\func{waitpid} per completare la procedura di terminazione in modo da evitare
+la formazione di zombie\index{zombie}.
 
 In \figref{fig:sig_sigchld_handl} è mostrato il codice contenente una
-implementazione generica di una routine di gestione per \macro{SIGCHLD}, (che
-si trova nei sorgenti allegati nel file \file{HandSIGCHLD.c}); se ripetiamo i
-test di \secref{sec:proc_termination}, invocando \cmd{forktest} con l'opzione
+implementazione generica di una routine di gestione per \const{SIGCHLD}, (che
+si trova nei sorgenti allegati nel file \file{SigHand.c}); se ripetiamo i test
+di \secref{sec:proc_termination}, invocando \cmd{forktest} con l'opzione
 \cmd{-s} (che si limita ad effettuare l'installazione di questa funzione come
-gestore di \macro{SIGCHLD}) potremo verificare che non si ha più la creazione
-di zombie.
+gestore di \const{SIGCHLD}) potremo verificare che non si ha più la creazione
+di zombie\index{zombie}.
 
 %  è pertanto
 % naturale usare un esempio che ci permette di concludere la trattazione della
@@ -1398,16 +1411,15 @@ di zombie.
 
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
-    \begin{lstlisting}{}
+  \footnotesize 
+  \begin{lstlisting}{}
 #include <errno.h>       /* error symbol definitions */
 #include <signal.h>      /* signal handling declarations */
 #include <sys/types.h>
 #include <sys/wait.h>
 #include "macro.h"
 
-void HandSIGCHLD(int sig)
+void HandSigCHLD(int sig)
 {
     int errno_save;
     int status;
@@ -1427,8 +1439,7 @@ void HandSIGCHLD(int sig)
     /* return */
     return;
 }
-    \end{lstlisting}
-  \end{minipage} 
+  \end{lstlisting}
   \normalsize 
   \caption{Codice di una funzione generica di gestione per il segnale
     \texttt{SIGCHLD}.}  
@@ -1454,7 +1465,7 @@ prima della generazione di ulteriori segnali dello stesso tipo. In questo caso
 normalmente i segnali segnali successivi vengono ``fusi'' col primo ed al
 processo ne viene recapitato soltanto uno.
 
-Questo può essere un caso comune proprio con \macro{SIGCHLD}, qualora capiti
+Questo può essere un caso comune proprio con \const{SIGCHLD}, qualora capiti
 che molti processi figli terminino in rapida successione. Esso inoltre si
 presenta tutte le volte che un segnale viene bloccato: per quanti siano i
 segnali emessi durante il periodo di blocco, una volta che quest'ultimo sarà
@@ -1463,13 +1474,13 @@ rimosso sar
 Allora, nel caso della terminazione dei processi figli, se si chiamasse
 \func{waitpid} una sola volta, essa leggerebbe lo stato di terminazione per un
 solo processo, anche se i processi terminati sono più di uno, e gli altri
-resterebbero in stato di zombie per un tempo indefinito.
+resterebbero in stato di zombie\index{zombie} per un tempo indefinito.
 
 Per questo occorre ripetere la chiamata di \func{waitpid} fino a che essa non
 ritorni un valore nullo, segno che non resta nessun processo di cui si debba
 ancora ricevere lo stato di terminazione (si veda \secref{sec:proc_wait} per
 la sintassi della funzione). Si noti anche come la funzione venga invocata con
-il parametro \macro{WNOHANG} che permette di evitare il suo blocco quando
+il parametro \const{WNOHANG} che permette di evitare il suo blocco quando
 tutti gli stati di terminazione sono stati ricevuti.
 
 
@@ -1499,7 +1510,7 @@ questo pu
 versione di \func{sleep} potrebbe essere quella illustrata in
 \figref{fig:sig_sleep_wrong}.
 
-Dato che è nostra intenzione utilizzare \macro{SIGALRM} il primo passo della
+Dato che è nostra intenzione utilizzare \const{SIGALRM} il primo passo della
 nostra implementazione di sarà quello di installare il relativo gestore
 salvando il precedente (\texttt{\small 14-17}).  Si effettuerà poi una
 chiamata ad \func{alarm} per specificare il tempo d'attesa per l'invio del
@@ -1511,8 +1522,7 @@ rimanente (\texttt{\small 22-23}) che potr
 l'interruzione di \func{pause} venisse causata da un altro segnale.
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \footnotesize
     \begin{lstlisting}{}
 void alarm_hand(int sig) {
     /* check if the signal is the right one */
@@ -1539,8 +1549,7 @@ unsigned int sleep(unsigned int seconds)
     /* return remaining time */
     return alarm(0);
 }
-    \end{lstlisting}
-  \end{minipage} 
+  \end{lstlisting}
   \normalsize 
   \caption{Una implementazione pericolosa di \func{sleep}.} 
   \label{fig:sig_sleep_wrong}
@@ -1552,9 +1561,9 @@ presenta una pericolosa race condition\index{race condition}.  Infatti se il
 processo viene interrotto fra la chiamata di \func{alarm} e \func{pause} può
 capitare (ad esempio se il sistema è molto carico) che il tempo di attesa
 scada prima dell'esecuzione quest'ultima, cosicché essa sarebbe eseguita dopo
-l'arrivo di \macro{SIGALRM}. In questo caso ci si troverebbe di fronte ad un
-deadlock, in quanto \func{pause} non verrebbe mai più interrotta (se non in
-caso di un altro segnale).
+l'arrivo di \const{SIGALRM}. In questo caso ci si troverebbe di fronte ad un
+deadlock\index{deadlock}, in quanto \func{pause} non verrebbe mai più
+interrotta (se non in caso di un altro segnale).
 
 Questo problema può essere risolto (ed è la modalità con cui veniva fatto in
 SVr2) usando la funzione \func{longjmp} (vedi \secref{sec:proc_longjmp}) per
@@ -1563,8 +1572,7 @@ uscita di quest'ultima, si pu
 codice del tipo di quello riportato in \figref{fig:sig_sleep_incomplete}.
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \footnotesize 
     \begin{lstlisting}{}
 static jmp_buff alarm_return;
 unsigned int sleep(unsigned int seconds)
@@ -1593,8 +1601,7 @@ void alarm_hand(int sig)
         longjump(alarm_return, 1);
     }
 }      
-    \end{lstlisting}
-  \end{minipage} 
+  \end{lstlisting}
   \normalsize 
   \caption{Una implementazione ancora malfunzionante di \func{sleep}.} 
   \label{fig:sig_sleep_incomplete}
@@ -1622,8 +1629,7 @@ programma (con un codice del tipo di quello riportato in
 \figref{fig:sig_event_wrong}).
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \footnotesize
     \begin{lstlisting}{}
 sig_atomic_t flag;
 int main()
@@ -1644,8 +1650,7 @@ void alarm_hand(int sig)
     flag = 1;
     return;
 }      
-    \end{lstlisting}
-  \end{minipage} 
+  \end{lstlisting}
   \normalsize 
   \caption{Un esempio non funzionante del codice per il controllo di un
     evento generato da un segnale.}
@@ -1719,7 +1724,7 @@ degli insiemi di segnali: \func{sigemptyset}, \func{sigfillset},
   \bodydesc{Le prime quattro funzioni ritornano 0 in caso di successo, mentre
     \func{sigismember} ritorna 1 se \param{signum} è in \param{set} e 0
     altrimenti. In caso di errore tutte ritornano -1, con \var{errno}
-    impostata a \macro{EINVAL} (il solo errore possibile è che \param{signum}
+    impostata a \errval{EINVAL} (il solo errore possibile è che \param{signum}
     non sia un segnale valido).}
 \end{functions}
 
@@ -1754,10 +1759,10 @@ da un processo. Il suo prototipo 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] Si è specificato un numero di segnale invalido o si è
-    cercato di installare il gestore per \macro{SIGKILL} o
-    \macro{SIGSTOP}.
-  \item[\macro{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido o si è
+    cercato di installare il gestore per \const{SIGKILL} o
+    \const{SIGSTOP}.
+  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
@@ -1816,7 +1821,7 @@ dell'implementazione di \code{sleep} mostrata in
 \secref{fig:sig_sleep_incomplete}. In quel caso infatti se il segnale di
 allarme avesse interrotto un altro gestore questo non sarebbe stato
 eseguito correttamente; la cosa poteva essere prevenuta installando gli altri
-gestori usando \var{sa\_mask} per bloccare \macro{SIGALRM} durante la
+gestori usando \var{sa\_mask} per bloccare \const{SIGALRM} durante la
 loro esecuzione.  Il valore di \var{sa\_flag} permette di specificare vari
 aspetti del comportamento di \func{sigaction}, e della reazione del processo
 ai vari segnali; i valori possibili ed il relativo significato sono riportati
@@ -1830,27 +1835,27 @@ in \tabref{tab:sig_sa_flag}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{SA\_NOCLDSTOP}& Se il segnale è \macro{SIGCHLD} allora non deve
+    \const{SA\_NOCLDSTOP}& Se il segnale è \const{SIGCHLD} allora non deve
                            essere notificato quando il processo figlio viene
-                           fermato da uno dei segnali \macro{SIGSTOP},
-                           \macro{SIGTSTP}, \macro{SIGTTIN} o 
-                           \macro{SIGTTOU}.\\
-    \macro{SA\_ONESHOT}  & Ristabilisce l'azione per il segnale al valore 
+                           fermato da uno dei segnali \const{SIGSTOP},
+                           \const{SIGTSTP}, \const{SIGTTIN} o 
+                           \const{SIGTTOU}.\\
+    \const{SA\_ONESHOT}  & Ristabilisce l'azione per il segnale al valore 
                            predefinito una volta che il gestore è stato
                            lanciato, riproduce cioè il comportamento della
                            semantica inaffidabile.\\  
-    \macro{SA\_RESETHAND}& Sinonimo di \macro{SA\_ONESHOT}. \\
-    \macro{SA\_RESTART}  & Riavvia automaticamente le \textit{slow system
+    \const{SA\_RESETHAND}& Sinonimo di \const{SA\_ONESHOT}. \\
+    \const{SA\_RESTART}  & Riavvia automaticamente le \textit{slow system
                            call} quando vengono interrotte dal suddetto
                            segnale; riproduce cioè il comportamento standard
                            di BSD.\\ 
-    \macro{SA\_NOMASK}   & Evita che il segnale corrente sia bloccato durante
+    \const{SA\_NOMASK}   & Evita che il segnale corrente sia bloccato durante
                            l'esecuzione del gestore.\\
-    \macro{SA\_NODEFER}  & Sinonimo di \macro{SA\_NOMASK}.\\
-    \macro{SA\_SIGINFO}  & Deve essere specificato quando si vuole usare un
+    \const{SA\_NODEFER}  & Sinonimo di \const{SA\_NOMASK}.\\
+    \const{SA\_SIGINFO}  & Deve essere specificato quando si vuole usare un
                            gestore in forma estesa usando
                            \var{sa\_sigaction} al posto di \var{sa\_handler}.\\
-    \macro{SA\_ONSTACK}  & Stabilisce l'uso di uno stack alternativo per
+    \const{SA\_ONSTACK}  & Stabilisce l'uso di uno stack alternativo per
                            l'esecuzione del gestore (vedi
                            \secref{sec:sig_specific_features}).\\ 
     \hline
@@ -1866,7 +1871,7 @@ permette\footnote{La possibilit
   ottenere alcune informazioni addizionali usando \var{sa\_handler} con un
   secondo parametro addizionale di tipo \var{struct sigcontext}, che adesso è
   deprecato.}  di utilizzare due forme diverse di gestore, da
-specificare, a seconda dell'uso o meno del flag \macro{SA\_SIGINFO},
+specificare, a seconda dell'uso o meno del flag \const{SA\_SIGINFO},
 rispettivamente attraverso i campi \var{sa\_sigaction} o \var{sa\_handler},
 (che devono essere usati in maniera alternativa, in certe implementazioni
 questi vengono addirittura definiti come \ctyp{union}): la prima è quella
@@ -1914,25 +1919,25 @@ In generale \var{si\_code} contiene, per i segnali generici, per quelli
 real-time e per tutti quelli inviati tramite \func{kill}, informazioni circa
 l'origine del segnale (se generato dal kernel, da un timer, da \func{kill},
 ecc.). Alcuni segnali però usano \var{si\_code} per fornire una informazione
-specifica: ad esempio i vari segnali di errore (\macro{SIGFPE},
-\macro{SIGILL}, \macro{SIGBUS} e \macro{SIGSEGV}) lo usano per fornire
+specifica: ad esempio i vari segnali di errore (\const{SIGFPE},
+\const{SIGILL}, \const{SIGBUS} e \const{SIGSEGV}) lo usano per fornire
 maggiori dettagli riguardo l'errore (come il tipo di errore aritmetico, di
 istruzione illecita o di violazione di memoria) mentre alcuni segnali di
-controllo (\macro{SIGCHLD}, \macro{SIGTRAP} e \macro{SIGPOLL}) forniscono
+controllo (\const{SIGCHLD}, \const{SIGTRAP} e \const{SIGPOLL}) forniscono
 altre informazioni speecifiche.  In tutti i casi il valore del campo è
 riportato attraverso delle costanti (le cui definizioni si trovano
 \file{bits/siginfo.h}) il cui elenco dettagliato è disponibile nella pagina di
 manuale di di \func{sigaction}.
 
 Il resto della struttura è definito come \ctyp{union} ed i valori
-eventualmente presenti dipendono dal segnale, così \macro{SIGCHLD} ed i
+eventualmente presenti dipendono dal segnale, così \const{SIGCHLD} ed i
 segnali real-time (vedi \secref{sec:sig_real_time}) inviati tramite
 \func{kill} avvalorano \var{si\_pid} e \var{si\_uid} coi valori corrispondenti
-al processo che ha emesso il segnale, \macro{SIGILL}, \macro{SIGFPE},
-\macro{SIGSEGV} e \macro{SIGBUS} avvalorano \var{si\_addr} con l'indirizzo cui
-è avvenuto l'errore, \macro{SIGIO} (vedi \secref{sec:file_asyncronous_io})
+al processo che ha emesso il segnale, \const{SIGILL}, \const{SIGFPE},
+\const{SIGSEGV} e \const{SIGBUS} avvalorano \var{si\_addr} con l'indirizzo cui
+è avvenuto l'errore, \const{SIGIO} (vedi \secref{sec:file_asyncronous_io})
 avvalora \var{si\_fd} con il numero del file descriptor e \var{si\_band} per i
-dati urgenti su un socket.
+dati urgenti su un socket\index{socket}.
 
 Benché sia possibile usare nello stesso programma sia \func{sigaction} che
 \func{signal} occorre molta attenzione, in quanto le due funzioni possono
@@ -1952,9 +1957,8 @@ meno che non si sia vincolati all'aderenza stretta allo standard ISO C, 
 sempre il caso di evitare l'uso di \func{signal} a favore di \func{sigaction}.
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
-    \begin{lstlisting}{}
+  \footnotesize 
+  \begin{lstlisting}{}
 typedef void SigFunc(int);
 inline SigFunc * Signal(int signo, SigFunc *func) 
 {
@@ -1974,7 +1978,6 @@ inline SigFunc * Signal(int signo, SigFunc *func)
     return (old_handl.sa_handler);
 }
     \end{lstlisting}
-  \end{minipage} 
   \normalsize 
   \caption{Una funzione equivalente a \func{signal} definita attraverso
     \func{sigaction}.} 
@@ -1984,25 +1987,24 @@ inline SigFunc * Signal(int signo, SigFunc *func)
 Per questo motivo si è provveduto, per mantenere un'interfaccia semplificata
 che abbia le stesse caratteristiche di \func{signal}, a definire una funzione
 equivalente attraverso \func{sigaction}; la funzione è \code{Signal}, e si
-trova definita come \code{inline} nel file \file{wrapper.h} (nei sorgenti
-allegati), riportata in \figref{fig:sig_Signal_code}. La riutilizzeremo spesso
-in seguito. 
+trova definita nel file \file{SigHand.c} (nei sorgenti allegati), e riportata
+in \figref{fig:sig_Signal_code}. La riutilizzeremo spesso in seguito.
 
 \subsection{La gestione della \textsl{maschera dei segnali} o 
   \textit{signal mask}}
 \label{sec:sig_sigmask}
 
 Come spiegato in \secref{sec:sig_semantics} tutti i moderni sistemi unix-like
-permettono si bloccare temporaneamente (o di eliminare completamente, impostando
-\macro{SIG\_IGN} come azione) la consegna dei segnali ad un processo. Questo è
-fatto specificando la cosiddetta \textsl{maschera dei segnali} (o
-\textit{signal mask}) del processo\footnote{nel caso di Linux essa è mantenuta
-  dal campo \var{blocked} della \var{task\_struct} del processo.} cioè
-l'insieme dei segnali la cui consegna è bloccata. Abbiamo accennato in
-\secref{sec:proc_fork} che la \textit{signal mask} viene ereditata dal padre
-alla creazione di un processo figlio, e abbiamo visto al paragrafo precedente
-che essa può essere modificata, durante l'esecuzione di un gestore,
-attraverso l'uso dal campo \var{sa\_mask} di \var{sigaction}.
+permettono si bloccare temporaneamente (o di eliminare completamente,
+impostando \const{SIG\_IGN} come azione) la consegna dei segnali ad un
+processo. Questo è fatto specificando la cosiddetta \textsl{maschera dei
+  segnali} (o \textit{signal mask}) del processo\footnote{nel caso di Linux
+  essa è mantenuta dal campo \var{blocked} della \var{task\_struct} del
+  processo.} cioè l'insieme dei segnali la cui consegna è bloccata. Abbiamo
+accennato in \secref{sec:proc_fork} che la \textit{signal mask} viene
+ereditata dal padre alla creazione di un processo figlio, e abbiamo visto al
+paragrafo precedente che essa può essere modificata, durante l'esecuzione di
+un gestore, attraverso l'uso dal campo \var{sa\_mask} di \var{sigaction}.
 
 Uno dei problemi evidenziatisi con l'esempio di \secref{fig:sig_event_wrong} è
 che in molti casi è necessario proteggere delle sezioni di codice (nel caso in
@@ -2023,8 +2025,8 @@ segnali; il suo prototipo 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] Si è specificato un numero di segnale invalido.
-  \item[\macro{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
+  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
@@ -2043,12 +2045,12 @@ quell'indirizzo.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{SIG\_BLOCK}   & L'insieme dei segnali bloccati è l'unione fra
+    \const{SIG\_BLOCK}   & L'insieme dei segnali bloccati è l'unione fra
                            quello specificato e quello corrente.\\
-    \macro{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi
+    \const{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi
                            dalla maschera dei segnali, specificare la
                            cancellazione di un segnale non bloccato è legale.\\
-    \macro{SIG\_SETMASK} & La maschera dei segnali è impostata al valore
+    \const{SIG\_SETMASK} & La maschera dei segnali è impostata al valore
                            specificato da \param{set}.\\
     \hline
   \end{tabular}
@@ -2086,15 +2088,15 @@ sospensione del processo lo standard POSIX ha previsto la funzione
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] Si è specificato un numero di segnale invalido.
-  \item[\macro{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
+  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
 Come esempio dell'uso di queste funzioni proviamo a riscrivere un'altra volta
 l'esempio di implementazione di \code{sleep}. Abbiamo accennato in
 \secref{sec:sig_sigaction} come con \func{sigaction} sia possibile bloccare
-\macro{SIGALRM} nell'installazione dei gestori degli altri segnali, per
+\const{SIGALRM} nell'installazione dei gestori degli altri segnali, per
 poter usare l'implementazione vista in \secref{fig:sig_sleep_incomplete} senza
 interferenze.  Questo però comporta una precauzione ulteriore al semplice uso
 della funzione, vediamo allora come usando la nuova interfaccia è possibile
@@ -2102,8 +2104,7 @@ ottenere un'implementazione, riportata in \figref{fig:sig_sleep_ok} che non
 presenta neanche questa necessità.
 
 \begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \footnotesize 
     \begin{lstlisting}{}
 void alarm_hand(int);
 unsigned int sleep(unsigned int seconds)
@@ -2136,7 +2137,6 @@ void alarm_hand(int sig)
     return;     /* just return to interrupt sigsuspend */
 }
     \end{lstlisting}
-  \end{minipage} 
   \normalsize 
   \caption{Una implementazione completa di \func{sleep}.} 
   \label{fig:sig_sleep_ok}
@@ -2149,18 +2149,18 @@ non esegue nessuna operazione, limitandosi a ritornare per interrompere il
 programma messo in attesa.
 
 La prima parte della funzione (\texttt{\small 11-15}) provvede ad installare
-l'opportuno gestore per \macro{SIGALRM}, salvando quello originario, che
+l'opportuno gestore per \const{SIGALRM}, salvando quello originario, che
 sarà ripristinato alla conclusione della stessa (\texttt{\small 28}); il passo
-successivo è quello di bloccare \macro{SIGALRM} (\texttt{\small 17-19}) per
+successivo è quello di bloccare \const{SIGALRM} (\texttt{\small 17-19}) per
 evitare che esso possa essere ricevuto dal processo fra l'esecuzione di
 \func{alarm} (\texttt{\small 21}) e la sospensione dello stesso. Nel fare
 questo si salva la maschera corrente dei segnali, che sarà ripristinata alla
 fine (\texttt{\small 27}), e al contempo si prepara la maschera dei segnali
-\var{sleep\_mask} per riattivare \macro{SIGALRM} all'esecuzione di
+\var{sleep\_mask} per riattivare \const{SIGALRM} all'esecuzione di
 \func{sigsuspend}.  
 
 In questo modo non sono più possibili race condition\index{race condition}
-dato che \macro{SIGALRM} viene disabilitato con \func{sigprocmask} fino alla
+dato che \const{SIGALRM} viene disabilitato con \func{sigprocmask} fino alla
 chiamata di \func{sigsuspend}. Questo metodo è assolutamente generale e può
 essere applicato a qualunque altra situazione in cui si deve attendere per un
 segnale, i passi sono sempre i seguenti:
@@ -2172,8 +2172,9 @@ segnale, i passi sono sempre i seguenti:
 \item Ripristinare la maschera dei segnali originaria.
 \end{enumerate*}
 Per quanto possa sembrare strano bloccare la ricezione di un segnale per poi
-riabilitarla immediatamente dopo, in questo modo si evita il deadlock dovuto
-all'arrivo del segnale prima dell'esecuzione di \func{sigsuspend}.
+riabilitarla immediatamente dopo, in questo modo si evita il
+deadlock\index{deadlock} dovuto all'arrivo del segnale prima dell'esecuzione
+di \func{sigsuspend}.
 
 
 \subsection{Ulteriori funzioni di gestione}
@@ -2212,14 +2213,14 @@ gestori, occorre per
 \item Usare la funzione \func{sigaltstack} per rendere noto al sistema
   l'esistenza e la locazione dello stack alternativo.
 \item Quando si installa un gestore occorre usare \func{sigaction}
-  specificando il flag \macro{SA\_ONSTACK} (vedi \tabref{tab:sig_sa_flag}) per
+  specificando il flag \const{SA\_ONSTACK} (vedi \tabref{tab:sig_sa_flag}) per
   dire al sistema di usare lo stack alternativo durante l'esecuzione del
   gestore. 
 \end{enumerate*}
 
 In genere il primo passo viene effettuato allocando un'opportuna area di
 memoria con \code{malloc}; in \file{signal.h} sono definite due costanti,
-\macro{SIGSTKSZ} e \macro{MINSIGSTKSZ}, che possono essere utilizzate per
+\const{SIGSTKSZ} e \const{MINSIGSTKSZ}, che possono essere utilizzate per
 allocare una quantità di spazio opportuna, in modo da evitare overflow. La
 prima delle due è la dimensione canonica per uno stack di segnali e di norma è
 sufficiente per tutti gli usi normali. La seconda è lo spazio che occorre al
@@ -2240,13 +2241,13 @@ Installa un nuovo stack per i segnali.
     errore, nel qual caso \var{errno} assumerà i valori:
 
   \begin{errlist}
-  \item[\macro{ENOMEM}] La dimensione specificata per il nuovo stack è minore
-  di \macro{MINSIGSTKSZ}.
-  \item[\macro{EPERM}] Uno degli indirizzi non è valido.
-  \item[\macro{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre
+  \item[\errcode{ENOMEM}] La dimensione specificata per il nuovo stack è minore
+  di \const{MINSIGSTKSZ}.
+  \item[\errcode{EPERM}] Uno degli indirizzi non è valido.
+  \item[\errcode{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre
   questo è attivo (cioè il processo è in esecuzione su di esso).
-  \item[\macro{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
-  valore diverso da zero che non è \macro{SS\_DISABLE}.
+  \item[\errcode{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
+  valore diverso da zero che non è \const{SS\_DISABLE}.
   \end{errlist}}
 \end{prototype}
 
@@ -2278,19 +2279,19 @@ indica lo stato dello stack. Nell'indicare un nuovo stack occorre
 inizializzare \var{ss\_sp} e \var{ss\_size} rispettivamente al puntatore e
 alla dimensione della memoria allocata, mentre \var{ss\_flags} deve essere
 nullo.  Se invece si vuole disabilitare uno stack occorre indicare
-\macro{SS\_DISABLE} come valore di \var{ss\_flags} e gli altri valori saranno
+\const{SS\_DISABLE} come valore di \var{ss\_flags} e gli altri valori saranno
 ignorati.
 
 Se \param{oss} non è nullo verrà restituito dalla funzione indirizzo e
 dimensione dello stack corrente nei relativi campi, mentre \var{ss\_flags}
-potrà assumere il valore \macro{SS\_ONSTACK} se il processo è in esecuzione
+potrà assumere il valore \const{SS\_ONSTACK} se il processo è in esecuzione
 sullo stack alternativo (nel qual caso non è possibile cambiarlo) e
-\macro{SS\_DISABLE} se questo non è abilitato.
+\const{SS\_DISABLE} se questo non è abilitato.
 
 In genere si installa uno stack alternativo per i segnali quando si teme di
 avere problemi di esaurimento dello stack standard o di superamento di un
 limite imposto con chiamata de tipo \code{setrlimit(RLIMIT\_STACK, \&rlim)}.
-In tal caso infatti si avrebbe un segnale di \macro{SIGSEGV}, che potrebbe
+In tal caso infatti si avrebbe un segnale di \const{SIGSEGV}, che potrebbe
 essere gestito soltanto avendo abilitato uno stack alternativo. 
 
 Si tenga presente che le funzioni chiamate durante l'esecuzione sullo stack
@@ -2396,8 +2397,8 @@ vengono chiamati \textsl{segnali real-time}, in particolare:
 Queste nuove caratteristiche (eccetto l'ultima, che, come visto in
 \secref{sec:sig_sigaction}, è parzialmente disponibile anche con i segnali
 ordinari) si applicano solo ai nuovi segnali real-time; questi ultimi sono
-accessibili in un range di valori specificati dalle due macro \macro{SIGRTMIN}
-e \macro{SIGRTMAX},\footnote{in Linux di solito il primo valore è 32, ed il
+accessibili in un range di valori specificati dalle due macro \const{SIGRTMIN}
+e \const{SIGRTMAX},\footnote{in Linux di solito il primo valore è 32, ed il
   secondo \code{\_NSIG-1}, che di norma è 63, per un totale di 32 segnali
   disponibili, contro gli almeno 8 richiesti da POSIX.1b.} che specificano il
 numero minimo e massimo associato ad un segnale real-time.
@@ -2427,7 +2428,7 @@ union sigval {
         int sival_int;
         void *sival_ptr;
 }
-          \end{lstlisting}
+    \end{lstlisting}
   \end{minipage} 
   \normalsize 
   \caption{La struttura \type{sigval}, usata dai segnali real time per
@@ -2448,15 +2449,15 @@ funzione, \func{sigqueue}, il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EAGAIN}] La coda è esarita, ci sono già \macro{SIGQUEUE\_MAX}
+  \item[\errcode{EAGAIN}] La coda è esarita, ci sono già \const{SIGQUEUE\_MAX}
     segnali in attesa si consegna.
-  \item[\macro{EPERM}] Non si hanno privilegi appropriati per inviare il
+  \item[\errcode{EPERM}] Non si hanno privilegi appropriati per inviare il
     segnale al processo specificato.
-  \item[\macro{ESRCH}] Il processo \param{pid} non esiste.
-  \item[\macro{EINVAL}] Si è specificato un valore non valido per
+  \item[\errcode{ESRCH}] Il processo \param{pid} non esiste.
+  \item[\errcode{EINVAL}] Si è specificato un valore non valido per
     \param{signo}.
   \end{errlist}
-  ed inoltre \macro{ENOMEM}.}
+  ed inoltre \errval{ENOMEM}.}
 \end{prototype}
 
 Il comportamento della funzione è analogo a quello di \func{kill}, ed i
@@ -2465,14 +2466,14 @@ stessi; un valore nullo di \func{signo} permette di verificare le condizioni
 di errore senza inviare nessun segnale.
 
 Se il segnale è bloccato la funzione ritorna immediatamente, se si è
-installato un gestore con \macro{SA\_SIGINFO} e ci sono risorse
+installato un gestore con \const{SA\_SIGINFO} e ci sono risorse
 disponibili, vale a dire che c'è posto nella coda\footnote{la profondità della
-  coda è indicata dalla costante \macro{SIGQUEUE\_MAX}, una della tante
+  coda è indicata dalla costante \const{SIGQUEUE\_MAX}, una della tante
   costanti di sistema definite dallo standard POSIX, che non abbiamo riportato
   esplicitamente in \secref{sec:sys_limits}. Il suo valore minimo secondo lo
-  standard, \macro{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32.}, esso viene inserito
+  standard, \const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32.}, esso viene inserito
 e diventa pendente; una volta consegnato riporterà nel campo \var{si\_code} di
-\var{siginfo} il valore \macro{SI\_QUEUE} e il campo \var{si\_value} riceverà
+\var{siginfo} il valore \const{SI\_QUEUE} e il campo \var{si\_value} riceverà
 quanto inviato con \param{value}. Se invece si è installato un gestore
 nella forma classica il segnale sarà generato, ma tutte le caratteristiche
 tipiche dei segnali real-time (priorità e coda) saranno perse.
@@ -2490,11 +2491,11 @@ meccanismi di comunicazione elementare; la prima di queste funzioni 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EINTR}] La funzione è stata interrotta.
-  \item[\macro{EINVAL}] Si è specificato un valore non valido per
+  \item[\errcode{EINTR}] La funzione è stata interrotta.
+  \item[\errcode{EINVAL}] Si è specificato un valore non valido per
     \param{set}.
   \end{errlist}
-  ed inoltre \macro{EFAULT}.}
+  ed inoltre \errval{EFAULT}.}
 \end{prototype}
 
 La funzione estrae dall'insieme dei segnali pendenti uno qualunque dei segnali
@@ -2536,7 +2537,7 @@ relativi prototipi sono:
     errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
     \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
   \begin{errlist}
-  \item[\macro{EAGAIN}] Si è superato il timeout senza che un segnale atteso
+  \item[\errcode{EAGAIN}] Si è superato il timeout senza che un segnale atteso
     fosse emmesso.
   \end{errlist}
 }