Si prosegue con la riorganizzazione di \macro{}
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 7 Dec 2002 15:57:55 +0000 (15:57 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 7 Dec 2002 15:57:55 +0000 (15:57 +0000)
errors.tex
fileadv.tex
filedir.tex
fileintro.tex
filestd.tex
fileunix.tex
intro.tex
ipc.tex
process.tex
prochand.tex
session.tex

index 434deca..d006491 100644 (file)
@@ -44,11 +44,11 @@ gestione dei file.
   file che si suppone erroneamente essere esistente.
 \item \errcode{EIO} \textit{Input/output error}. Errore di input/output: usato
   per riportare errori hardware in lettura/scrittura su un dispositivo.
-\item \errcode{ENXIO} \textit{No such device or address}. Device inesistente: il
-  sistema ha tentato di usare un dispositivo attraverso il file specificato,
-  ma non lo ha trovato. Può significare che il file di dispositivo non è
-  corretto, che il modulo relativo non è stato caricato nel kernel, o che il
-  dispositivo è fisicamente assente o non funzionante.
+\item \errcode{ENXIO} \textit{No such device or address}. Device inesistente:
+  il sistema ha tentato di usare un dispositivo attraverso il file
+  specificato, ma non lo ha trovato. Può significare che il file di
+  dispositivo non è corretto, che il modulo relativo non è stato caricato nel
+  kernel, o che il dispositivo è fisicamente assente o non funzionante.
 \item \errcode{ENOEXEC} \textit{Invalid executable file format}. Il file non ha
   un formato eseguibile, è un errore riscontrato dalle funzioni \func{exec}.
 \item \errcode{EBADF} \textit{Bad file descriptor}. File descriptor non valido:
@@ -62,17 +62,17 @@ gestione dei file.
   troppi link simbolici nella risoluzione di un pathname.  
 \item \errcode{ENAMETOOLONG} \textit{File name too long}. Si è indicato un
   pathname troppo lungo.
-\item \errcode{ENOTBLK} \textit{Block device required}. Si è specificato un file
-  che non è un \textit{block device} in un contesto in cui era necessario
+\item \errcode{ENOTBLK} \textit{Block device required}. Si è specificato un
+  file che non è un \textit{block device} in un contesto in cui era necessario
   specificare un \textit{block device} (ad esempio si è tentato di montare un
   file ordinario).
 \item \errcode{EEXIST} \textit{File exists}. Si è specificato un file esistente
   in un contesto in cui ha senso solo specificare un nuovo file.
-\item \errcode{EBUSY} \textit{Resource busy}. Una risorsa di sistema che non può
-  essere condivisa è occupata. Ad esempio si è tentato di cancellare la
-  directory su cui si è montato un filesystem. 
-\item \errcode{EXDEV} \textit{Cross-device link}. Si è tentato di creare un link
-  diretto che attraversa due filesystem differenti.
+\item \errcode{EBUSY} \textit{Resource busy}. Una risorsa di sistema che non
+  può essere condivisa è occupata. Ad esempio si è tentato di cancellare la
+  directory su cui si è montato un filesystem.
+\item \errcode{EXDEV} \textit{Cross-device link}. Si è tentato di creare un
+  link diretto che attraversa due filesystem differenti.
 \item \errcode{ENODEV} \textit{No such device}. Si è indicato un tipo di device
   sbagliato ad una funzione che ne richiede uno specifico.
 \item \errcode{ENOTDIR} \textit{Not a directory}. Si è specificato un file che
@@ -91,8 +91,8 @@ gestione dei file.
   controllo relativa ad un terminale su un file che non lo è.
 \item \errcode{ETXTBSY} \textit{Text file busy}. Si è cercato di eseguire un
   file che è aperto in scrittura, o scrivere un file che è in esecuzione. 
-\item \errcode{EFBIG} \textit{File too big}. Si è ecceduto il limite imposto dal
-  sistema sulla dimensione massima che un file può avere.
+\item \errcode{EFBIG} \textit{File too big}. Si è ecceduto il limite imposto
+  dal sistema sulla dimensione massima che un file può avere.
 \item \errcode{ENOSPC} \textit{No space left on device}. la directory in cui si
   vuole creare il link non ha spazio per ulteriori voci.
 \item \errcode{ESPIPE} \textit{Invalid seek operation}. 
index c73a8df..171f474 100644 (file)
@@ -279,8 +279,8 @@ sostituisce i precedenti, ed aggiunge a \func{select} una nuova funzione
   2.1. Le \acr{libc4} e \acr{libc5} non contengono questo header, le
   \acr{glibc} 2.0 contengono una definizione sbagliata di \func{psignal},
   senza l'argomento \param{sigmask}, la definizione corretta è presente dalle
-  \acr{glibc} 2.1-2.2.1 se si è definito \const{\_GNU\_SOURCE} e nelle
-  \acr{glibc} 2.2.2-2.2.4 se si è definito \const{\_XOPEN\_SOURCE} con valore
+  \acr{glibc} 2.1-2.2.1 se si è definito \macro{\_GNU\_SOURCE} e nelle
+  \acr{glibc} 2.2.2-2.2.4 se si è definito \macro{\_XOPEN\_SOURCE} con valore
   maggiore di 600.} il cui prototipo è:
 \begin{prototype}{sys/select.h}
   {int pselect(int n, fd\_set *readfds, fd\_set *writefds, fd\_set *exceptfds,
@@ -412,7 +412,7 @@ attraverso l'uso di una apposita struttura \type{aiocb} (il cui nome sta per
 \textit{asyncronous I/O control block}), che viene passata come argomento a
 tutte le funzioni dell'interfaccia. La sua definizione, come effettuata in
 \file{aio.h}, è riportata in \figref{fig:file_aiocb}. Nello steso file è
-definita la macro \const{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la
+definita la macro \macro{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la
 disponibilità dell'interfaccia per l'I/O asincrono.
 
 \begin{figure}[!htb]
@@ -454,8 +454,8 @@ essere specificato l'indirizzo del buffer usato per l'I/O, ed in
 Il campo \var{aio\_reqprio} permette di impostare la priorità delle operazioni
 di I/O.\footnote{in generale perché ciò sia possibile occorre che la
   piattaforma supporti questa caratteristica, questo viene indicato definendo
-  le macro \const{\_POSIX\_PRIORITIZED\_IO}, e
-  \const{\_POSIX\_PRIORITY\_SCHEDULING}.} La priorità viene impostata a
+  le macro \macro{\_POSIX\_PRIORITIZED\_IO}, e
+  \macro{\_POSIX\_PRIORITY\_SCHEDULING}.} La priorità viene impostata a
 partire da quella del processo chiamante (vedi \secref{sec:proc_priority}),
 cui viene sottratto il valore di questo campo.
 
index 1e99a28..650eb53 100644 (file)
@@ -210,8 +210,8 @@ nello stesso filesystem) si usa invece la funzione \func{rename},\footnote{la
     errore, nel qual caso il file non viene toccato. La variabile
     \var{errno} viene impostata secondo i seguenti codici di errore:
   \begin{errlist} 
-  \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non
-    è una directory.
+  \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath}
+    non è una directory.
   \item[\errcode{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso
     filesystem.
   \item[\errcode{ENOTEMPTY}] \var{newpath} è una directory già esistente e non
@@ -454,15 +454,17 @@ accedere ai tipi usati da queste funzioni si deve includere il file
   \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[\errcode{EEXIST}] Un file (o una directory) con quel nome esiste di già. 
+  \item[\errcode{EEXIST}] Un file (o una directory) con quel nome esiste di
+    già.
   \item[\errcode{EACCESS}] 
     Non c'è il permesso di scrittura per la directory in cui si vuole inserire
     la nuova directory.
-  \item[\errcode{EMLINK}] La directory in cui si vuole creare la nuova directory
-    contiene troppi file. Sotto Linux questo normalmente non avviene perché il
-    filesystem standard consente la creazione di un numero di file maggiore di
-    quelli che possono essere contenuti nel disco, ma potendo avere a che
-    fare anche con filesystem di altri sistemi questo errore può presentarsi.
+  \item[\errcode{EMLINK}] La directory in cui si vuole creare la nuova
+    directory contiene troppi file. Sotto Linux questo normalmente non avviene
+    perché il filesystem standard consente la creazione di un numero di file
+    maggiore di quelli che possono essere contenuti nel disco, ma potendo
+    avere a che fare anche con filesystem di altri sistemi questo errore può
+    presentarsi.
   \item[\errcode{ENOSPC}] Non c'è abbastanza spazio sul file system per creare
     la nuova directory o si è esaurita la quota disco dell'utente.
   \end{errlist}
@@ -493,9 +495,9 @@ suo prototipo 
     directory, oppure la directory che contiene \var{dirname} ha lo sticky bit
     impostato e l'userid effettivo del processo non corrisponde al
     proprietario della directory.
-  \item[\errcode{EACCESS}] Non c'è il permesso di scrittura per la directory che
-    contiene la directory che si vuole cancellare, o non c'è il permesso di
-    attraversare (esecuzione) una delle directory specificate in
+  \item[\errcode{EACCESS}] Non c'è il permesso di scrittura per la directory
+    che contiene la directory che si vuole cancellare, o non c'è il permesso
+    di attraversare (esecuzione) una delle directory specificate in
     \var{dirname}.
   \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
     radice di qualche processo.
@@ -690,8 +692,8 @@ appunto per \textit{change directory}, il suo prototipo 
     nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{ENOTDIR}] Non si è specificata una directory.
-  \item[\errcode{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
-    \param{path}.
+  \item[\errcode{EACCESS}] Manca il permesso di ricerca su uno dei componenti
+    di \param{path}.
   \end{errlist}
   ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
   \const{ENOMEM}, \const{ELOOP} e \const{EIO}.}
index dfedd39..a84918a 100644 (file)
@@ -1,4 +1,4 @@
-%% fileintro.tex
+% fileintro.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
index 670e55b..9a5ecc6 100644 (file)
@@ -366,7 +366,7 @@ una \func{sync} (vedi \secref{sec:file_sync}).
 
 Linux supporta anche una altra funzione, \func{fcloseall}, come estensione GNU
 implementata dalle \acr{glibc}, accessibile avendo definito
-\const{\_GNU\_SOURCE}, il suo prototipo è:
+\macro{\_GNU\_SOURCE}, il suo prototipo è:
 \begin{prototype}{stdio.h}{int fcloseall(void)}
   Chiude tutti gli stream. 
   
@@ -856,7 +856,7 @@ che eccede le dimensioni del buffer.
 Per questo motivo le \acr{glibc} prevedono, come estensione GNU, due
 nuove funzioni per la gestione dell'input/output di linea, il cui uso
 permette di risolvere questi problemi. L'uso di queste funzioni deve
-essere attivato definendo la macro \const{\_GNU\_SOURCE} prima di
+essere attivato definendo la macro \macro{\_GNU\_SOURCE} prima di
 includere \file{stdio.h}. La prima delle due, \func{getline}, serve per
 leggere una linea terminata da un newline esattamente allo stesso modo
 di \func{fgets}, il suo prototipo è:
@@ -1140,7 +1140,7 @@ scritti sulla stringa di destinazione:
 
 Per eliminare alla radice questi problemi, le \acr{glibc} supportano una
 specifica estensione GNU che alloca dinamicamente tutto lo spazio necessario;
-l'estensione si attiva al solito definendo \const{\_GNU\_SOURCE}, le due
+l'estensione si attiva al solito definendo \macro{\_GNU\_SOURCE}, le due
 funzioni sono:
 \begin{functions}
   \headdecl{stdio.h} 
@@ -1509,8 +1509,8 @@ scelta, si pu
     \func{write}.}
 \end{prototype}
 \noindent anche di questa funzione esiste una analoga
-\func{fflush\_unlocked}\footnote{accessibile definendo \const{\_BSD\_SOURCE} o
-  \const{\_SVID\_SOURCE} o \const{\_GNU\_SOURCE}.} che non effettua il blocco
+\func{fflush\_unlocked}\footnote{accessibile definendo \macro{\_BSD\_SOURCE} o
+  \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco
 dello stream.
 
 Se \param{stream} è \val{NULL} lo scarico dei dati è forzato per tutti gli
@@ -1565,7 +1565,7 @@ Ci sono comunque situazioni in cui questo non basta, come quando un thread
 necessita di compiere più di una operazione sullo stream atomicamente, per
 questo motivo le librerie provvedono anche delle funzioni che permettono la
 gestione esplicita dei blocchi sugli stream; queste funzioni sono disponibili
-definendo \const{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono:
+definendo \macro{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono:
 \begin{functions}
   \headdecl{stdio.h}
   
index dde9889..f0243d4 100644 (file)
@@ -135,11 +135,11 @@ posto di questi valori numerici:
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{STDIN\_FILENO}  & \textit{file descriptor} dello \textit{standard
+    \const{STDIN\_FILENO}  & \textit{file descriptor} dello \textit{standard
       input} \\
-    \macro{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard
+    \const{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard
       output} \\
-    \macro{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
+    \const{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
       error}\\
     \hline
   \end{tabular}
@@ -197,26 +197,26 @@ prototipo 
     caso di errore. In questo caso la variabile \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
-  \item[\macro{EEXIST}] \var{pathname} esiste e si è specificato
-    \macro{O\_CREAT} e \macro{O\_EXCL}.  
-  \item[\macro{EISDIR}] \var{pathname} indica una directory e si è tentato
+  \item[\errcode{EEXIST}] \var{pathname} esiste e si è specificato
+    \const{O\_CREAT} e \const{O\_EXCL}.  
+  \item[\errcode{EISDIR}] \var{pathname} indica una directory e si è tentato
     l'accesso in scrittura. 
-  \item[\macro{ENOTDIR}] si è specificato \macro{O\_DIRECTORY} e \var{pathname}
+  \item[\errcode{ENOTDIR}] si è specificato \const{O\_DIRECTORY} e \var{pathname}
     non è una directory.
-  \item[\macro{ENXIO}] si sono impostati \macro{O\_NOBLOCK} o \macro{O\_WRONLY}
+  \item[\errcode{ENXIO}] si sono impostati \const{O\_NOBLOCK} o \const{O\_WRONLY}
     ed il file è una fifo che non viene letta da nessun processo o
     \var{pathname} è un file di dispositivo ma il dispositivo è assente.
-  \item[\macro{ENODEV}] \var{pathname} si riferisce a un file di dispositivo
+  \item[\errcode{ENODEV}] \var{pathname} si riferisce a un file di dispositivo
     che non esiste.  
-  \item[\macro{ETXTBSY}] si è cercato di accedere in scrittura all'immagine di
-    un programma in esecuzione.
-  \item[\macro{ELOOP}] si sono incontrati troppi link simbolici nel risolvere
-    pathname o si è indicato \macro{O\_NOFOLLOW} e \var{pathname} è un link
+  \item[\errcode{ETXTBSY}] si è cercato di accedere in scrittura all'immagine
+    di un programma in esecuzione.
+  \item[\errcode{ELOOP}] si sono incontrati troppi link simbolici nel risolvere
+    pathname o si è indicato \const{O\_NOFOLLOW} e \var{pathname} è un link
     simbolico.
   \end{errlist}
-  ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EROFS}, \macro{EFAULT}, \macro{ENOSPC}, \macro{ENOMEM},
-  \macro{EMFILE} e \macro{ENFILE}.}
+  ed inoltre \const{EACCES}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{EROFS}, \const{EFAULT}, \const{ENOSPC}, \const{ENOMEM},
+  \const{EMFILE} e \const{ENFILE}.}
 \end{functions}
 
 La funzione apre il file, usando il primo file descriptor libero, e crea
@@ -231,69 +231,69 @@ sempre il file descriptor con il valore pi
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
     \hline % modalità di accesso al file
-    \macro{O\_RDONLY} & apre il file in sola lettura. \\
-    \macro{O\_WRONLY} & apre il file in sola scrittura. \\
-    \macro{O\_RDWR} & apre il file in lettura/scrittura. \\
+    \const{O\_RDONLY} & apre il file in sola lettura. \\
+    \const{O\_WRONLY} & apre il file in sola scrittura. \\
+    \const{O\_RDWR} & apre il file in lettura/scrittura. \\
     \hline % modalità di apertura del file
     \hline
-    \macro{O\_CREAT} & se il file non esiste verrà creato, con le regole di
+    \const{O\_CREAT} & se il file non esiste verrà creato, con le regole di
     titolarità del file viste in \secref{sec:file_ownership}. Il parametro
     \var{mode} deve essere specificato. \\
-    \macro{O\_EXCL} & usato in congiunzione con \macro{O\_CREAT} fa sì che
+    \const{O\_EXCL} & usato in congiunzione con \const{O\_CREAT} fa sì che
     l'esistenza del file diventi un errore\protect\footnotemark\ che fa fallire
-    \func{open} con \macro{EEXIST}. \\
-    \macro{O\_NONBLOCK} & apre il file in modalità non bloccante. Questo
+    \func{open} con \errcode{EEXIST}. \\
+    \const{O\_NONBLOCK} & apre il file in modalità non bloccante. Questo
     valore specifica anche una modalità di operazione (vedi sotto), e 
     comporta che \func{open} ritorni immediatamente (l'opzione ha senso 
     solo per le fifo, torneremo questo in \secref{sec:ipc_named_pipe}). \\
-    \macro{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di
+    \const{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di
     terminale, questo non diventerà il terminale di controllo, anche se il
     processo non ne ha ancora uno (si veda \secref{sec:sess_ctrl_term}). \\
-    \macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
+    \const{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
     \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
-    \macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
+    \const{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
     \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
-    \macro{O\_TRUNC} & se il file esiste ed è un file di dati e la modalità di
+    \const{O\_TRUNC} & se il file esiste ed è un file di dati e la modalità di
     apertura consente la scrittura, allora la sua lunghezza verrà troncata a
     zero. Se il file è un terminale o una fifo il flag verrà ignorato, negli
     altri casi il comportamento non è specificato. \\
-    \macro{O\_NOFOLLOW} & se \var{pathname} è un link simbolico la chiamata
+    \const{O\_NOFOLLOW} & se \var{pathname} è un link simbolico la chiamata
     fallisce. Questa è un'estensione BSD aggiunta in Linux dal kernel 2.1.126.
     Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa
     opzione è ignorata. \\
-    \macro{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata
+    \const{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata
     fallisce. Questo flag è specifico di Linux ed è stato introdotto con il
     kernel 2.1.126 per evitare dei
     \textit{DoS}\index{DoS}\protect\footnotemark\ quando  
     \func{opendir} viene chiamata su una 
     fifo o su un device di unità a nastri, non deve essere utilizzato al di 
     fuori dell'implementazione di \func{opendir}. \\
-    \macro{O\_LARGEFILE} & nel caso di sistemi a 32 bit che supportano file di
+    \const{O\_LARGEFILE} & nel caso di sistemi a 32 bit che supportano file di
     grandi dimensioni consente di aprire file le cui dimensioni non possono
     essere rappresentate da numeri a 31 bit. \\
     \hline
     \hline  % modalità di operazione col file
-    \macro{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
+    \const{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
     scrittura la posizione corrente viene sempre impostata alla fine del
     file. Può causare corruzione del file con NFS se più di un processo scrive
     allo stesso tempo.\footnotemark\\
-    \macro{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per
+    \const{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per
     le operazioni di I/O (che tratteremo in \secref{sec:file_noblocking}): 
     questo significa il fallimento di \func{read} in assenza di dati da 
     leggere e quello di \func{write} in caso di impossibilità di scrivere 
     immediatamente. Questa modalità ha senso solo per le fifo e per alcuni 
     file di dispositivo. \\
-    \macro{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
-    \macro{O\_NONBLOCK}.\\
-    \macro{O\_ASYNC} & apre il file per l'I/O in modalità
+    \const{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
+    \const{O\_NONBLOCK}.\\
+    \const{O\_ASYNC} & apre il file per l'I/O in modalità
     asincrona (vedi \secref{sec:file_asyncronous_io}). Quando è impostato viene
-    generato il segnale \macro{SIGIO} tutte le volte che sono disponibili
+    generato il segnale \const{SIGIO} tutte le volte che sono disponibili
     dati in input sul file. \\ 
-    \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni
+    \const{O\_SYNC} & apre il file per l'input/output sincrono, ogni
     \func{write} bloccherà fino al completamento della scrittura di tutti dati
     sul sull'hardware sottostante.\\
-    \macro{O\_FSYNC} & sinonimo di \macro{O\_SYNC}. \\
-    \macro{O\_NOATIME} & blocca l'aggiornamento dei tempi dei di accesso dei
+    \const{O\_FSYNC} & sinonimo di \const{O\_SYNC}. \\
+    \const{O\_NOATIME} & blocca l'aggiornamento dei tempi dei di accesso dei
     file (vedi \secref{sec:file_file_times}). In Linux questa opzione non è
     disponibile per il singolo file ma come opzione per il filesystem in fase
     di montaggio.\\
@@ -373,7 +373,7 @@ secondo le tre modalit
 ciascuno di questi bit. Dette costanti possono essere combinate fra di loro
 con un OR aritmetico per costruire il valore (in forma di maschera binaria)
 dell'argomento \param{flags} da passare alla \func{open} per specificarne il
-comportamento. I due flag \macro{O\_NOFOLLOW} e \macro{O\_DIRECTORY} sono
+comportamento. I due flag \const{O\_NOFOLLOW} e \const{O\_DIRECTORY} sono
 estensioni specifiche di Linux, e deve essere definita la macro
 \macro{\_GNU\_SOURCE} per poterli usare.
 
@@ -401,10 +401,10 @@ descriptor ritorna disponibile; il suo prototipo 
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
     ed in questo caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-    \item[\macro{EBADF}]  \var{fd} non è un descrittore valido.
-    \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
+    \item[\errcode{EBADF}]  \var{fd} non è un descrittore valido.
+    \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
   \end{errlist}
-  ed inoltre \macro{EIO}.}
+  ed inoltre \const{EIO}.}
 \end{prototype}
 
 La chiusura di un file rilascia ogni blocco (il \textit{file locking} è
@@ -445,7 +445,7 @@ positivo come numero di byte dall'inizio del file. Tutte le operazioni di
 lettura e scrittura avvengono a partire da questa posizione che viene
 automaticamente spostata in avanti del numero di byte letti o scritti.
 
-In genere (a meno di non avere richiesto la modalità \macro{O\_APPEND}) questa
+In genere (a meno di non avere richiesto la modalità \const{O\_APPEND}) questa
 posizione viene impostata a zero all'apertura del file. È possibile impostarla
 ad un valore qualsiasi con la funzione \func{lseek}, il cui prototipo è:
 \begin{functions}
@@ -458,25 +458,25 @@ ad un valore qualsiasi con la funzione \func{lseek}, il cui prototipo 
     successo e -1 in caso di errore nel qual caso \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
-    \item[\macro{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
-    \item[\macro{EINVAL}] \param{whence} non è un valore valido.
+    \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
+    \item[\errcode{EINVAL}] \param{whence} non è un valore valido.
   \end{errlist}
-  ed inoltre \macro{EBADF}.}
+  ed inoltre \const{EBADF}.}
 \end{functions}
 
 La nuova posizione è impostata usando il valore specificato da \param{offset},
 sommato al riferimento dato da \param{whence}; quest'ultimo può assumere i
 seguenti valori\footnote{per compatibilità con alcune vecchie notazioni
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
-  \macro{L\_SET}, \macro{L\_INCR} e \macro{L\_XTND}.}:
+  \const{L\_SET}, \const{L\_INCR} e \const{L\_XTND}.}:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SEEK\_SET}] si fa riferimento all'inizio del file: il valore
+\item[\const{SEEK\_SET}] si fa riferimento all'inizio del file: il valore
   (sempre positivo) di \param{offset} indica direttamente la nuova posizione
   corrente.
-\item[\macro{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
+\item[\const{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
   ad essa viene sommato \param{offset} (che può essere negativo e positivo)
   per ottenere la nuova posizione corrente.
-\item[\macro{SEEK\_END}] si fa riferimento alla fine del file: alle dimensioni
+\item[\const{SEEK\_END}] si fa riferimento alla fine del file: alle dimensioni
   del file viene sommato \param{offset} (che può essere negativo e positivo)
   per ottenere la nuova posizione corrente.
 \end{basedescript}
@@ -491,7 +491,7 @@ Dato che la funzione ritorna la nuova posizione, usando il valore zero per
 \param{offset} si può riottenere la posizione corrente nel file chiamando la
 funzione con \code{lseek(fd, 0, SEEK\_CUR)}. 
 
-Si tenga presente inoltre che usare \macro{SEEK\_END} non assicura affatto che
+Si tenga presente inoltre che usare \const{SEEK\_END} non assicura affatto che
 la successiva scrittura avvenga alla fine del file, infatti se questo è stato
 aperto anche da un altro processo che vi ha scritto, la fine del file può
 essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
@@ -499,10 +499,10 @@ essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
 \index{race condition}, vedi \secref{sec:file_atomic}).
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
-questo caso la funzione ritorna l'errore \macro{EPIPE}. Questo, oltre che per
+questo caso la funzione ritorna l'errore \errcode{EPIPE}. Questo, oltre che per
 i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
 supportano questa funzione, come ad esempio per i file di
-terminale.\footnote{altri sistemi, usando \macro{SEEK\_SET}, in questo caso
+terminale.\footnote{altri sistemi, usando \const{SEEK\_SET}, in questo caso
   ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
 POSIX però non specifica niente in proposito. Infine alcuni file speciali, ad
 esempio \file{/dev/null}, non causano un errore ma restituiscono un valore
@@ -523,13 +523,13 @@ prototipo 
   \bodydesc{La funzione ritorna il numero di byte letti 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 da un segnale prima di
+  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
     aver potuto leggere qualsiasi dato.
-  \item[\macro{EAGAIN}] la funzione non aveva nessun dato da restituire e si
-    era aperto il file in modalità \macro{O\_NONBLOCK}.
+  \item[\errcode{EAGAIN}] la funzione non aveva nessun dato da restituire e si
+    era aperto il file in modalità \const{O\_NONBLOCK}.
   \end{errlist}
-  ed inoltre \macro{EBADF}, \macro{EIO}, \macro{EISDIR}, \macro{EBADF},
-  \macro{EINVAL} e \macro{EFAULT} ed eventuali altri errori dipendenti dalla
+  ed inoltre \const{EBADF}, \const{EIO}, \const{EISDIR}, \const{EBADF},
+  \const{EINVAL} e \const{EFAULT} ed eventuali altri errori dipendenti dalla
   natura dell'oggetto connesso a \var{fd}.}
 \end{prototype}
 
@@ -569,18 +569,18 @@ come vedremo in \secref{sec:sock_io_behav}), o per la lettura da certi file di
 dispositivo, come le unità a nastro, che restituiscono sempre i dati ad un
 singolo blocco alla volta.
 
-In realtà anche le due condizioni segnalate dagli errori \macro{EINTR} e
-\macro{EAGAIN} non sono errori. La prima si verifica quando la \func{read} è
+In realtà anche le due condizioni segnalate dagli errori \errcode{EINTR} e
+\errcode{EAGAIN} non sono errori. La prima si verifica quando la \func{read} è
 bloccata in attesa di dati in ingresso e viene interrotta da un segnale; in
 tal caso l'azione da intraprendere è quella di rieseguire la funzione.
 Torneremo in dettaglio sull'argomento in \secref{sec:sig_gen_beha}.
 
 La seconda si verifica quando il file è in modalità non bloccante (vedi
 \secref{sec:file_noblocking}) e non ci sono dati in ingresso: la funzione
-allora ritorna immediatamente con un errore \macro{EAGAIN}\footnote{sotto BSD
-  per questo errore viene usata la costante \macro{EWOULDBLOCK}, in Linux, con
-  le glibc, questa è sinonima di \macro{EAGAIN}.} che indica soltanto che
-occorrerà provare a ripetere la lettura.
+allora ritorna immediatamente con un errore \errcode{EAGAIN}\footnote{sotto
+  BSD per questo errore viene usata la costante \errcode{EWOULDBLOCK}, in
+  Linux, con le glibc, questa è sinonima di \errcode{EAGAIN}.} che indica
+soltanto che occorrerà provare a ripetere la lettura.
 
 La funzione \func{read} è una delle system call fondamentali, esistenti fin
 dagli albori di Unix, ma nella seconda versione delle \textit{Single Unix
@@ -627,29 +627,29 @@ scrivere su di esso utilizzando la funzione \func{write}, il cui prototipo 
   \bodydesc{La funzione ritorna il numero di byte scritti in caso di successo
     e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la
+  \item[\errcode{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la
     scrittura.
-  \item[\macro{EFBIG}] si è cercato di scrivere oltre la dimensione massima
+  \item[\errcode{EFBIG}] si è cercato di scrivere oltre la dimensione massima
     consentita dal filesystem o il limite per le dimensioni dei file del
     processo o su una posizione oltre il massimo consentito.
-  \item[\macro{EPIPE}] \var{fd} è connesso ad una pipe il cui altro capo è
+  \item[\errcode{EPIPE}] \var{fd} è connesso ad una pipe il cui altro capo è
     chiuso in lettura; in questo caso viene anche generato il segnale
-    \macro{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
+    \const{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
     funzione ritorna questo errore.
-  \item[\macro{EINTR}] la funzione è stata interrotta da un segnale prima di
+  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
     aver potuto scrivere qualsiasi dato.
-  \item[\macro{EAGAIN}] la funzione non aveva nessun dato da restituire e si
-    era aperto il file in modalità \macro{O\_NONBLOCK}.
+  \item[\errcode{EAGAIN}] la funzione non aveva nessun dato da restituire e si
+    era aperto il file in modalità \const{O\_NONBLOCK}.
   \end{errlist}
-  ed inoltre \macro{EBADF}, \macro{EIO}, \macro{EISDIR}, \macro{EBADF},
-  \macro{ENOSPC}, \macro{EINVAL} e \macro{EFAULT} ed eventuali altri errori
+  ed inoltre \const{EBADF}, \const{EIO}, \const{EISDIR}, \const{EBADF},
+  \const{ENOSPC}, \const{EINVAL} e \const{EFAULT} ed eventuali altri errori
   dipendenti dalla natura dell'oggetto connesso a \var{fd}.}
 \end{prototype}
 
 Come nel caso di \func{read} la funzione tenta di scrivere \var{count} byte a
 partire dalla posizione corrente nel file e sposta automaticamente la
 posizione in avanti del numero di byte scritti. Se il file è aperto in
-modalità \macro{O\_APPEND} i dati vengono sempre scritti alla fine del file.
+modalità \const{O\_APPEND} i dati vengono sempre scritti alla fine del file.
 Lo standard POSIX richiede che i dati scritti siano immediatamente disponibili
 ad una \func{read} chiamata dopo che la \func{write} che li ha scritti è
 ritornata; ma dati i meccanismi di caching non è detto che tutti i filesystem
@@ -720,7 +720,7 @@ stesso file, in particolare occorre tenere presente che:
   \func{write} la posizione corrente sarà cambiata solo nel processo. Se la
   scrittura eccede la dimensione corrente del file questo verrà esteso
   automaticamente con l'aggiornamento del campo \var{i\_size} nell'inode.
-\item se un file è in modalità \macro{O\_APPEND} tutte le volte che viene
+\item se un file è in modalità \const{O\_APPEND} tutte le volte che viene
   effettuata una scrittura la posizione corrente viene prima impostata alla
   dimensione corrente del file letta dall'inode. Dopo la scrittura il file
   viene automaticamente esteso.
@@ -756,7 +756,7 @@ Si noti inoltre che anche i flag di stato del file (quelli impostati
 dall'argomento \param{flag} di \func{open}) essendo tenuti nella voce della
 \textit{file table}\footnote{per la precisione nel campo \var{f\_flags} di
   \var{file}.}, vengono in questo caso condivisi. Ai file però sono associati
-anche altri flag, dei quali l'unico usato al momento è \macro{FD\_CLOEXEC},
+anche altri flag, dei quali l'unico usato al momento è \const{FD\_CLOEXEC},
 detti \textit{file descriptor flags}. Questi ultimi sono tenuti invece in
 \var{file\_struct}, e perciò sono specifici di ciascun processo e non vengono
 modificati dalle azioni degli altri anche in caso di condivisione della stessa
@@ -792,7 +792,7 @@ sovrascriver
 
 Il problema è che usare due system call in successione non è un'operazione
 atomica; il problema è stato risolto introducendo la modalità
-\macro{O\_APPEND}. In questo caso infatti, come abbiamo descritto in
+\const{O\_APPEND}. In questo caso infatti, come abbiamo descritto in
 precedenza, è il kernel che aggiorna automaticamente la posizione alla fine
 del file prima di effettuare la scrittura, e poi estende il file. Tutto questo
 avviene all'interno di una singola system call (la \func{write}) che non
@@ -807,7 +807,7 @@ parte di un altro processo che crea lo stesso file fra il controllo e la
 creazione.
 
 Per questo motivo sono stati introdotti per \func{open} i due flag
-\macro{O\_CREAT} e \macro{O\_EXCL}. In questo modo l'operazione di controllo
+\const{O\_CREAT} e \const{O\_EXCL}. In questo modo l'operazione di controllo
 dell'esistenza del file (con relativa uscita dalla funzione con un errore) e
 creazione in caso di assenza, diventa atomica essendo svolta tutta all'interno
 di una singola system call (per i dettagli sull'uso di questa caratteristica
@@ -865,10 +865,10 @@ usare le due funzioni \func{fsync} e \func{fdatasync}, i cui prototipi sono:
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
     nel qual caso \var{errno} assume i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] \param{fd} è un file speciale che non supporta la
+  \item[\errcode{EINVAL}] \param{fd} è un file speciale che non supporta la
     sincronizzazione.
   \end{errlist}
-  ed inoltre \macro{EBADF}, \macro{EROFS} e \macro{EIO}.}
+  ed inoltre \const{EBADF}, \const{EROFS} e \const{EIO}.}
 \end{functions}
 
 Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
@@ -901,8 +901,8 @@ prototipo 
     -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
-  \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
-  \item[\macro{EMFILE}] si è raggiunto il numero massimo consentito di file
+  \item[\errcode{EBADF}] \param{oldfd} non è un file aperto.
+  \item[\errcode{EMFILE}] si è raggiunto il numero massimo consentito di file
     descriptor aperti.
   \end{errlist}}
 \end{prototype}
@@ -954,9 +954,9 @@ prototipo 
   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
     -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha un
-    valore fuori dall'intervallo consentito per i file descriptor.
-  \item[\macro{EMFILE}] si è raggiunto il numero massimo consentito di file
+  \item[\errcode{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha
+    un valore fuori dall'intervallo consentito per i file descriptor.
+  \item[\errcode{EMFILE}] si è raggiunto il numero massimo consentito di file
     descriptor aperti.
   \end{errlist}}
 \end{prototype}
@@ -966,7 +966,7 @@ sar
 
 La duplicazione dei file descriptor può essere effettuata anche usando la
 funzione di controllo dei file \func{fnctl} (che esamineremo in
-\secref{sec:file_fcntl}) con il parametro \macro{F\_DUPFD}.
+\secref{sec:file_fcntl}) con il parametro \const{F\_DUPFD}.
 
 L'operazione ha la sintassi \code{fnctl(oldfd, F\_DUPFD, newfd)} e se si usa 0
 come valore per \param{newfd} diventa equivalente a \func{dup}. La sola
@@ -997,7 +997,7 @@ file descriptor viene usata la funzione \func{fcntl} il cui prototipo 
     codice dell'errore è restituito nella variabile \var{errno}; i codici
     possibili dipendono dal tipo di operazione, l'unico valido in generale è:
   \begin{errlist}
-  \item[\macro{EBADF}] \param{fd} non è un file aperto.
+  \item[\errcode{EBADF}] \param{fd} non è un file aperto.
   \end{errlist}}
 \end{functions}
 
@@ -1006,68 +1006,68 @@ Il comportamento di questa funzione 
 un esempio per la duplicazione dei file descriptor, una lista dei possibili
 valori è riportata di seguito:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{F\_DUPFD}] trova il primo file descriptor disponibile di valore
+\item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore
   maggiore o uguale ad \param{arg} e ne fa una copia di \var{fd}. In caso di
   successo ritorna il nuovo file descriptor. Gli errori possibili sono
-  \macro{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o
-  \macro{EMFILE} se il processo ha già raggiunto il massimo numero di
+  \errcode{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito
+  o \errcode{EMFILE} se il processo ha già raggiunto il massimo numero di
   descrittori consentito.
-\item[\macro{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
+\item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
   valore specificato con \param{arg}. Al momento l'unico bit usato è quello di
   \textit{close-on-exec}\index{close-on-exec}, identificato dalla costante
-  \macro{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
+  \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
   esecuzione di una \func{exec} (vedi \secref{sec:proc_exec}).
-\item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
-  \var{fd}, se \macro{FD\_CLOEXEC} è impostato i file descriptor aperti
+\item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
+  \var{fd}, se \const{FD\_CLOEXEC} è impostato i file descriptor aperti
   vengono chiusi attraverso una \func{exec} altrimenti (il comportamento
   predefinito) restano aperti.
-\item[\macro{F\_GETFL}] ritorna il valore del \textit{file status flag},
+\item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag},
   permette cioè di rileggere quei bit impostati da \func{open} all'apertura del
   file che vengono memorizzati (quelli riportati nella prima e terza sezione
   di \tabref{tab:file_open_flags}). 
-\item[\macro{F\_SETFL}] imposta il \textit{file status flag} al valore
+\item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore
   specificato da \param{arg}, possono essere impostati solo i bit riportati
   nella terza sezione di \tabref{tab:file_open_flags}.\footnote{la pagina di
-    manuale riporta come impostabili solo \macro{O\_APPEND},
-    \macro{O\_NONBLOCK} e \macro{O\_ASYNC}.}
-\item[\macro{F\_GETLK}] richiede un controllo sul file lock specificato da
+    manuale riporta come impostabili solo \const{O\_APPEND},
+    \const{O\_NONBLOCK} e \const{O\_ASYNC}.}
+\item[\const{F\_GETLK}] richiede un controllo sul file lock specificato da
   \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato
   (questa funzionalità è trattata in dettaglio in
   \secref{sec:file_posix_lock}).
-\item[\macro{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
+\item[\const{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
   specificato nella struttura puntata da \param{lock}. Se il lock è tenuto da
   qualcun'altro ritorna immediatamente restituendo -1 e imposta \var{errno} a
-  \macro{EACCES} o \macro{EAGAIN} (questa funzionalità è trattata in dettaglio
-  in \secref{sec:file_posix_lock}).
-\item[\macro{F\_SETLKW}] identica a \macro{F\_SETLK} eccetto per il fatto che
+  \errcode{EACCES} o \errcode{EAGAIN} (questa funzionalità è trattata in
+  dettaglio in \secref{sec:file_posix_lock}).
+\item[\const{F\_SETLKW}] identica a \const{F\_SETLK} eccetto per il fatto che
   la funzione non ritorna subito ma attende che il blocco sia rilasciato. Se
   l'attesa viene interrotta da un segnale la funzione restituisce -1 e imposta
-  \var{errno} a \macro{EINTR} (questa funzionalità è trattata in dettaglio in
+  \var{errno} a \errcode{EINTR} (questa funzionalità è trattata in dettaglio in
   \secref{sec:file_posix_lock}).
-\item[\macro{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
-  group che è preposto alla ricezione dei segnali \macro{SIGIO} e
-  \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
+\item[\const{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
+  group che è preposto alla ricezione dei segnali \const{SIGIO} e
+  \const{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
   process group è restituito come valore negativo.
-\item[\macro{F\_SETOWN}] imposta il processo o process group che riceverà i
-  segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
+\item[\const{F\_SETOWN}] imposta il processo o process group che riceverà i
+  segnali \const{SIGIO} e \const{SIGURG} per gli eventi associati al file
   descriptor \var{fd}.  I process group sono impostati usando valori negativi.
-\item[\macro{F\_GETSIG}] restituisce il valore del segnale mandato quando ci
+\item[\const{F\_GETSIG}] restituisce il valore del segnale mandato quando ci
   sono dati disponibili in input su un file descriptor aperto o impostato in
   I/O asincrono. Il valore 0 indica il valore predefinito (che è
-  \macro{SIGIO}), un valore diverso da zero indica il segnale richiesto, (che
-  può essere lo stesso \macro{SIGIO}).
-\item[\macro{F\_SETSIG}] imposta il segnale da inviare quando diventa
+  \const{SIGIO}), un valore diverso da zero indica il segnale richiesto, (che
+  può essere lo stesso \const{SIGIO}).
+\item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa
   possibile effettuare I/O sul file descriptor in caso di I/O asincrono. Il
-  valore zero indica di usare il segnale predefinito, \macro{SIGIO}. Un altro
-  valore (compreso lo stesso \macro{SIGIO}) specifica il segnale voluto; l'uso
+  valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
+  valore (compreso lo stesso \const{SIGIO}) specifica il segnale voluto; l'uso
   di un valore diverso da zero permette inoltre, se si è installato il
   manipolatore del segnale come \var{sa\_sigaction} usando
-  \macro{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere
+  \const{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere
   disponibili al manipolatore informazioni ulteriori informazioni riguardo il
   file che ha generato il segnale attraverso i valori restituiti in
   \type{siginfo\_t} (come vedremo in
-  \secref{sec:file_asyncronous_io}).\footnote{i due comandi \macro{F\_SETSIG}
-    e \macro{F\_GETSIG} sono una estensione specifica di Linux.}
+  \secref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG}
+    e \const{F\_GETSIG} sono una estensione specifica di Linux.}
 \end{basedescript}
 
 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
@@ -1078,11 +1078,11 @@ riprenderemo le tematiche relative all'I/O asincrono in
 \secref{sec:file_locking}).
 
 Per determinare le modalità di accesso inoltre è necessario estrarre i bit di
-accesso (ottenuti con il comando \macro{F\_GETFL}); infatti la definizione
-corrente non assegna bit separati a \macro{O\_RDONLY}, \macro{O\_WRONLY} e
-\macro{O\_RDWR},\footnote{posti rispettivamente ai valori 0, 1 e 2.} per cui il
+accesso (ottenuti con il comando \const{F\_GETFL}); infatti la definizione
+corrente non assegna bit separati a \const{O\_RDONLY}, \const{O\_WRONLY} e
+\const{O\_RDWR},\footnote{posti rispettivamente ai valori 0, 1 e 2.} per cui il
 valore si ottiene eseguendo un AND binario del valore di ritorno di
-\func{fcntl} con la maschera \macro{O\_ACCMODE} anch'essa definita in
+\func{fcntl} con la maschera \const{O\_ACCMODE} anch'essa definita in
 \file{fcntl.h}.
 
 
@@ -1112,12 +1112,13 @@ per ogni singolo dispositivo.  Il prototipo di questa funzione 
     caso di errore viene sempre restituito -1 ed \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
-  \item[\macro{ENOTTY}] il file \param{fd} non è associato con un device, o la
-    richiesta non è applicabile all'oggetto a cui fa riferimento \param{fd}.
-  \item[\macro{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
+  \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un device, o
+    la richiesta non è applicabile all'oggetto a cui fa riferimento
+    \param{fd}.
+  \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
     validi.
   \end{errlist}
-  ed inoltre \macro{EBADF} e \macro{EFAULT}.}
+  ed inoltre \const{EBADF} e \const{EFAULT}.}
 \end{prototype}
 
 La funzione serve in sostanza per fare tutte quelle operazioni che non si
@@ -1155,10 +1156,10 @@ specifici (ad esempio la gestione dei terminali 
 \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo i
 valori che sono definiti per ogni file:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{FIOCLEX}] Imposta il bit di \textit{close on exec}.
-\item[\macro{FIONCLEX}] Cancella il bit di \textit{close on exec}.
-\item[\macro{FIOASYNC}] Abilita l'I/O asincrono.
-\item[\macro{FIONBIO}] Abilita l'I/O in modalità non bloccante.
+\item[\const{FIOCLEX}] Imposta il bit di \textit{close on exec}.
+\item[\const{FIONCLEX}] Cancella il bit di \textit{close on exec}.
+\item[\const{FIOASYNC}] Abilita l'I/O asincrono.
+\item[\const{FIONBIO}] Abilita l'I/O in modalità non bloccante.
 \end{basedescript}
 relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}.
 
index f3b6575..2330e66 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -631,12 +631,12 @@ propri header file.
 
 Le macro disponibili per i vari standard sono le seguenti:
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macro{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
   tutte le funzionalità dello standard POSIX.1 (la versione IEEE Standard
   1003.1) insieme a tutte le funzionalità dello standard ISO C. Se viene anche
-  definita con un intero positivo la macro \const{\_POSIX\_C\_SOURCE} lo stato
+  definita con un intero positivo la macro \macro{\_POSIX\_C\_SOURCE} lo stato
   di questa non viene preso in considerazione.
-\item[\const{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
   positivo si controlla quale livello delle funzionalità specificate da POSIX
   viene messa a disposizione; più alto è il valore maggiori sono le
   funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate
@@ -647,7 +647,7 @@ Le macro disponibili per i vari standard sono le seguenti:
   Standard 1003.1b-1993).  Un valore maggiore o uguale a `199506L' attiva le
   funzionalità POSIX.1 specificate nell'edizione del 1996 (ISO/IEC 9945-1:
   1996). Valori superiori abiliteranno ulteriori estensioni.
-\item[\const{\_BSD\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard
   ISO C, POSIX.1 e POSIX.2. Alcune delle funzionalità previste da BSD sono
   però in conflitto con le corrispondenti definite nello standard POSIX.1, in
@@ -658,29 +658,29 @@ Le macro disponibili per i vari standard sono le seguenti:
   questo caso occorre pertanto anche usare l'opzione \cmd{-lbsd-compat} con il
   compilatore per indicargli di utilizzare le versioni nella libreria di
   compatibilità prima di quelle normali.
-\item[\const{\_SVID\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_SVID\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
   standard ISO C, POSIX.1, POSIX.2, and X/Open.
-\item[\const{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
   funzionalità descritte nella \textit{X/Open Portability Guide}. Anche queste
   sono un soprainsieme di quelle definite in POSIX.1 e POSIX.2 ed in effetti
-  sia \const{\_POSIX\_SOURCE} che \const{\_POSIX\_C\_SOURCE} vengono
+  sia \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
   automaticamente definite. Sono incluse anche ulteriori funzionalità
   disponibili in BSD e SVID. Se il valore della macro è posto a 500 questo
   include anche le nuove definizioni introdotte con la \textit{Single UNIX
     Specification, version 2}, cioè Unix98.
-\item[\const{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
+\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
   ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio
   \textit{X/Open Unix}.
-\item[\const{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
   funzionalità previste per la revisione delle librerie standard del C
   denominato ISO C99. Dato che lo standard non è ancora adottato in maniera
   ampia queste non sono abilitate automaticamente, ma le \acr{glibc} hanno già
   un'implementazione completa che può essere attivata definendo questa macro.
-\item[\const{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
+\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
   funzionalità per il supporto dei file di grandi dimensioni (il \textit{Large
     File Support} o LFS) con indici e dimensioni a 64 bit.
-\item[\const{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
+\item[\macro{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
   funzionalità disponibili: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID,
   X/Open, LFS più le estensioni specifiche GNU. Nel caso in cui BSD e POSIX
   confliggano viene data la precedenza a POSIX.
@@ -689,7 +689,7 @@ Le macro disponibili per i vari standard sono le seguenti:
 In particolare è da sottolineare che le \acr{glibc} supportano alcune
 estensioni specifiche GNU, che non sono comprese in nessuno degli
 standard citati. Per poterle utilizzare esse devono essere attivate
-esplicitamente definendo la macro \const{\_GNU\_SOURCE} prima di
+esplicitamente definendo la macro \macro{\_GNU\_SOURCE} prima di
 includere i vari header file.
 
 
diff --git a/ipc.tex b/ipc.tex
index 0da0c53..2a4c3bb 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -56,8 +56,8 @@ associati ad una \textit{pipe} 
 Crea una coppia di file descriptor associati ad una \textit{pipe}.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, nel qual caso \var{errno} potrà assumere i valori \macro{EMFILE},
-    \macro{ENFILE} e \macro{EFAULT}.}
+    errore, nel qual caso \var{errno} potrà assumere i valori \const{EMFILE},
+    \const{ENFILE} e \const{EFAULT}.}
 \end{prototype}
 
 La funzione restituisce la coppia di file descriptor nel vettore
@@ -66,7 +66,7 @@ accennato concetto di funzionamento di una pipe 
 scrive nel file descriptor aperto in scrittura viene ripresentato tale e quale
 nel file descriptor aperto in lettura. I file descriptor infatti non sono
 connessi a nessun file reale, ma ad un buffer nel kernel, la cui dimensione è
-specificata dal parametro di sistema \macro{PIPE\_BUF}, (vedi
+specificata dal parametro di sistema \const{PIPE\_BUF}, (vedi
 \secref{sec:sys_file_limits}). Lo schema di funzionamento di una pipe è
 illustrato in \figref{fig:ipc_pipe_singular}, in cui sono illustrati i due
 capi della pipe, associati a ciascun file descriptor, con le frecce che
@@ -112,11 +112,11 @@ essere bloccante (qualora non siano presenti dati), inoltre se si legge da una
 pipe il cui capo in scrittura è stato chiuso, si avrà la ricezione di un EOF
 (vale a dire che la funzione \func{read} ritornerà restituendo 0).  Se invece
 si esegue una scrittura su una pipe il cui capo in lettura non è aperto il
-processo riceverà il segnale \macro{EPIPE}, e la funzione di scrittura
-restituirà un errore di \macro{EPIPE} (al ritorno del manipolatore, o qualora
+processo riceverà il segnale \errcode{EPIPE}, e la funzione di scrittura
+restituirà un errore di \errcode{EPIPE} (al ritorno del manipolatore, o qualora
 il segnale sia ignorato o bloccato).
 
-La dimensione del buffer della pipe (\macro{PIPE\_BUF}) ci dà inoltre un'altra
+La dimensione del buffer della pipe (\const{PIPE\_BUF}) ci dà inoltre un'altra
 importante informazione riguardo il comportamento delle operazioni di lettura
 e scrittura su di una pipe; esse infatti sono atomiche fintanto che la
 quantità di dati da scrivere non supera questa dimensione. Qualora ad esempio
@@ -331,9 +331,9 @@ restituisce, lo standard input o lo standard output nella pipe collegata allo
 stream restituito come valore di ritorno.
   
 \bodydesc{La funzione restituisce l'indirizzo dello stream associato alla pipe
-  in caso di successo e \macro{NULL} per un errore, nel qual caso \var{errno}
+  in caso di successo e \val{NULL} per un errore, nel qual caso \var{errno}
   potrà assumere i valori relativi alle sottostanti invocazioni di \func{pipe}
-  e \func{fork} o \macro{EINVAL} se \param{type} non è valido.}
+  e \func{fork} o \errcode{EINVAL} se \param{type} non è valido.}
 \end{prototype}
 
 La funzione crea una pipe, esegue una \func{fork}, ed invoca il programma
@@ -386,12 +386,12 @@ originarie del codice a barre e produce un JPEG di dimensioni corrette.
 Questo approccio però non funziona, per via di una delle caratteristiche
 principali delle pipe. Per poter effettuare la conversione di un PDF infatti è
 necessario, per la struttura del formato, potersi spostare (con \func{lseek})
-all'interno del file da convertire; se si esegue la conversione con \cmd{gs} su
-un file regolare non ci sono problemi, una pipe però è rigidamente
+all'interno del file da convertire; se si esegue la conversione con \cmd{gs}
+su un file regolare non ci sono problemi, una pipe però è rigidamente
 sequenziale, e l'uso di \func{lseek} su di essa fallisce sempre con un errore
-di \macro{ESPIPE}, rendendo impossibile la conversione.  Questo ci dice che in
-generale la concatenazione di vari programmi funzionerà soltanto quando tutti
-prevedono una lettura sequenziale del loro input.
+di \errcode{ESPIPE}, rendendo impossibile la conversione.  Questo ci dice che
+in generale la concatenazione di vari programmi funzionerà soltanto quando
+tutti prevedono una lettura sequenziale del loro input.
 
 Per questo motivo si è dovuto utilizzare un procedimento diverso, eseguendo
 prima la conversione (sempre con \cmd{gs}) del PS in un altro formato
@@ -518,7 +518,7 @@ eseguita quando l'altro capo non 
 Le fifo però possono essere anche aperte in modalità \textsl{non-bloccante},
 nel qual caso l'apertura del capo in lettura avrà successo solo quando anche
 l'altro capo è aperto, mentre l'apertura del capo in scrittura restituirà
-l'errore di \macro{ENXIO} fintanto che non verrà aperto il capo in lettura.
+l'errore di \errcode{ENXIO} fintanto che non verrà aperto il capo in lettura.
 
 In Linux è possibile aprire le fifo anche in lettura/scrittura,\footnote{lo
   standard POSIX lascia indefinito il comportamento in questo caso.}
@@ -536,7 +536,7 @@ piuttosto frequente l'utilizzo di una fifo come canale di comunicazione nelle
 situazioni un processo deve ricevere informazioni da altri. In questo caso è
 fondamentale che le operazioni di scrittura siano atomiche; per questo si deve
 sempre tenere presente che questo è vero soltanto fintanto che non si supera
-il limite delle dimensioni di \macro{PIPE\_BUF} (si ricordi quanto detto in
+il limite delle dimensioni di \const{PIPE\_BUF} (si ricordi quanto detto in
 \secref{sec:ipc_pipes}).
 
 A parte il caso precedente, che resta probabilmente il più comune, Stevens
@@ -693,7 +693,7 @@ effettuando richieste) con la fifo chiusa sul lato in lettura e a questo punto
 restituendo un end-of-file.\footnote{Si è usata questa tecnica per
   compatibilità, Linux infatti supporta l'apertura delle fifo in
   lettura/scrittura, per cui si sarebbe potuto effettuare una singola apertura
-  con \macro{O\_RDWR}, la doppia apertura comunque ha il vantaggio che non si
+  con \const{O\_RDWR}, la doppia apertura comunque ha il vantaggio che non si
   può scrivere per errore sul capo aperto in sola lettura.}
 
 Per questo motivo, dopo aver eseguito l'apertura in lettura (\texttt{\small
@@ -792,7 +792,7 @@ Inoltrata la richiesta si pu
 si apre (\texttt{\small 26--30}) la fifo appena creata, da cui si deve
 riceverla, dopo di che si effettua una lettura (\texttt{\small 31})
 nell'apposito buffer; si è supposto, come è ragionevole, che le frasi inviate
-dal server siano sempre di dimensioni inferiori a \macro{PIPE\_BUF},
+dal server siano sempre di dimensioni inferiori a \const{PIPE\_BUF},
 tralasciamo la gestione del caso in cui questo non è vero. Infine si stampa
 (\texttt{\small 32}) a video la risposta, si chiude (\texttt{\small 33}) la
 fifo e si cancella (\texttt{\small 34}) il relativo file.
@@ -806,7 +806,7 @@ complessa e continua ad avere vari inconvenienti\footnote{lo stesso Stevens,
   che esamina questa architettura in \cite{APUE}, nota come sia impossibile
   per il server sapere se un client è andato in crash, con la possibilità di
   far restare le fifo temporanee sul filesystem, di come sia necessario
-  intercettare \macro{SIGPIPE} dato che un client può terminare dopo aver
+  intercettare \const{SIGPIPE} dato che un client può terminare dopo aver
   fatto una richiesta, ma prima che la risposta sia inviata (cosa che nel
   nostro esempio non è stata fatta).}; in generale infatti l'interfaccia delle
 fifo non è adatta a risolvere questo tipo di problemi, che possono essere
@@ -852,12 +852,12 @@ entrambe le direzioni. Il prototipo della funzione 
   \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{EAFNOSUPPORT}] I socket locali non sono supportati.
-  \item[\macro{EPROTONOSUPPORT}] Il protocollo specificato non è supportato.
-  \item[\macro{EOPNOTSUPP}] Il protocollo specificato non supporta la
+  \item[\errcode{EAFNOSUPPORT}] I socket locali non sono supportati.
+  \item[\errcode{EPROTONOSUPPORT}] Il protocollo specificato non è supportato.
+  \item[\errcode{EOPNOTSUPP}] Il protocollo specificato non supporta la
   creazione di coppie di socket.
   \end{errlist}
-  ed inoltre \macro{EMFILE},  \macro{EFAULT}.
+  ed inoltre \const{EMFILE},  \const{EFAULT}.
 }
 \end{functions}
 
@@ -867,7 +867,7 @@ sull'altro e viceversa. I parametri \param{domain}, \param{type} e
 \param{protocol} derivano dall'interfaccia dei socket (che è quella che
 fornisce il substrato per connettere i due descrittori), ma in questo caso i
 soli valori validi che possono essere specificati sono rispettivamente
-\macro{AF\_UNIX}, \macro{SOCK\_STREAM} e \var{0}.
+\const{AF\_UNIX}, \const{SOCK\_STREAM} e \var{0}.
 
 L'utilità di chiamare questa funzione per evitare due chiamate a \func{pipe}
 può sembrare limitata; in realtà l'utilizzo di questa funzione (e dei socket
@@ -1046,8 +1046,8 @@ propriamente un permesso di modifica). I valori di \var{mode} sono gli stessi
 ed hanno lo stesso significato di quelli riportati in
 \secref{tab:file_mode_flags}\footnote{se però si vogliono usare le costanti
   simboliche ivi definite occorrerà includere il file \file{sys/stat.h},
-  alcuni sistemi definiscono le costanti \macro{MSG\_R} (\texttt{0400}) e
-  \macro{MSG\_W} (\texttt{0200}) per indicare i permessi base di lettura e
+  alcuni sistemi definiscono le costanti \const{MSG\_R} (\texttt{0400}) e
+  \const{MSG\_W} (\texttt{0200}) per indicare i permessi base di lettura e
   scrittura per il proprietario, da utilizzare, con gli opportuni shift, pure
   per il gruppo e gli altri, in Linux, visto la loro scarsa utilità, queste
   costanti non sono definite.} e come per i file definiscono gli accessi per
@@ -1124,8 +1124,8 @@ assumere tutti i valori possibili, rendendo molto pi
 un identificatore può venire riutilizzato.
 
 Il sistema dispone sempre di un numero fisso di oggetti di IPC,\footnote{fino
-  al kernel 2.2.x questi valori, definiti dalle costanti \macro{MSGMNI},
-  \macro{SEMMNI} e \macro{SHMMNI}, potevano essere cambiati (come tutti gli
+  al kernel 2.2.x questi valori, definiti dalle costanti \const{MSGMNI},
+  \const{SEMMNI} e \const{SHMMNI}, potevano essere cambiati (come tutti gli
   altri limiti relativi al \textit{SysV IPC}) solo con una ricompilazione del
   kernel, andando a modificarne la definizione nei relativi header file.  A
   partire dal kernel 2.4.x è possibile cambiare questi valori a sistema attivo
@@ -1138,7 +1138,7 @@ precedenza per restituire l'identificatore al numero di oggetti presenti viene
 sommato il valore di \var{seq} moltiplicato per il numero massimo di oggetti
 di quel tipo,\footnote{questo vale fino ai kernel della serie 2.2.x, dalla
   serie 2.4.x viene usato lo stesso fattore per tutti gli oggetti, esso è dato
-  dalla costante \macro{IPCMNI}, definita in \file{include/linux/ipc.h}, che
+  dalla costante \const{IPCMNI}, definita in \file{include/linux/ipc.h}, che
   indica il limite massimo per il numero di tutti oggetti di IPC, ed il cui
   valore è 32768.}  si evita così il riutilizzo degli stessi numeri, e si fa
 sì che l'identificatore assuma tutti i valori possibili.
@@ -1243,18 +1243,18 @@ una 
   \bodydesc{La funzione restituisce l'identificatore (un intero positivo) o -1
     in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EACCES}] Il processo chiamante non ha i privilegi per accedere
+  \item[\errcode{EACCES}] Il processo chiamante non ha i privilegi per accedere
   alla coda richiesta.  
-  \item[\macro{EEXIST}] Si è richiesta la creazione di una coda che già
-  esiste, ma erano specificati sia \macro{IPC\_CREAT} che \macro{IPC\_EXCL}. 
-  \item[\macro{EIDRM}] La coda richiesta è marcata per essere cancellata.
-  \item[\macro{ENOENT}] Si è cercato di ottenere l'identificatore di una coda
-    di messaggi specificando una chiave che non esiste e \macro{IPC\_CREAT}
+  \item[\errcode{EEXIST}] Si è richiesta la creazione di una coda che già
+  esiste, ma erano specificati sia \const{IPC\_CREAT} che \const{IPC\_EXCL}. 
+  \item[\errcode{EIDRM}] La coda richiesta è marcata per essere cancellata.
+  \item[\errcode{ENOENT}] Si è cercato di ottenere l'identificatore di una coda
+    di messaggi specificando una chiave che non esiste e \const{IPC\_CREAT}
     non era specificato.
-  \item[\macro{ENOSPC}] Si è cercato di creare una coda di messaggi quando è
-    stato superato il limite massimo di code (\macro{MSGMNI}).
+  \item[\errcode{ENOSPC}] Si è cercato di creare una coda di messaggi quando è
+    stato superato il limite massimo di code (\const{MSGMNI}).
   \end{errlist}
-  ed inoltre \macro{ENOMEM}.
+  ed inoltre \const{ENOMEM}.
 }
 \end{functions}
 
@@ -1262,33 +1262,34 @@ Le funzione (come le analoghe che si usano per gli altri oggetti) serve sia a
 ottenere l'identificatore di una coda di messaggi esistente, che a crearne una
 nuova. L'argomento \param{key} specifica la chiave che è associata
 all'oggetto, eccetto il caso in cui si specifichi il valore
-\macro{IPC\_PRIVATE}, nel qual caso la coda è creata ex-novo e non vi è
+\const{IPC\_PRIVATE}, nel qual caso la coda è creata ex-novo e non vi è
 associata alcuna chiave, il processo (ed i suoi eventuali figli) potranno
 farvi riferimento solo attraverso l'identificatore.
 
-Se invece si specifica un valore diverso da \macro{IPC\_PRIVATE}\footnote{in
+Se invece si specifica un valore diverso da \const{IPC\_PRIVATE}\footnote{in
   Linux questo significa un valore diverso da zero.} l'effetto della funzione
 dipende dal valore di \param{flag}, se questo è nullo la funzione si limita ad
 effettuare una ricerca sugli oggetti esistenti, restituendo l'identificatore
-se trova una corrispondenza, o fallendo con un errore di \macro{ENOENT} se non
-esiste o di \macro{EACCESS} se si sono specificati dei permessi non validi.
+se trova una corrispondenza, o fallendo con un errore di \errcode{ENOENT} se
+non esiste o di \errcode{EACCESS} se si sono specificati dei permessi non
+validi.
 
 Se invece si vuole creare una nuova coda di messaggi \param{flag} non può
 essere nullo e deve essere fornito come maschera binaria, impostando il bit
-corrispondente al valore \macro{IPC\_CREAT}. In questo caso i nove bit meno
+corrispondente al valore \const{IPC\_CREAT}. In questo caso i nove bit meno
 significativi di \param{flag} saranno usati come permessi per il nuovo
 oggetto, secondo quanto illustrato in \secref{sec:ipc_sysv_access_control}.
-Se si imposta anche il bit corrispondente a \macro{IPC\_EXCL} la funzione avrà
+Se si imposta anche il bit corrispondente a \const{IPC\_EXCL} la funzione avrà
 successo solo se l'oggetto non esiste già, fallendo con un errore di
-\macro{EEXIST} altrimenti.
+\errcode{EEXIST} altrimenti.
 
-Si tenga conto che l'uso di \macro{IPC\_PRIVATE} non impedisce ad altri
+Si tenga conto che l'uso di \const{IPC\_PRIVATE} non impedisce ad altri
 processi di accedere alla coda (se hanno privilegi sufficienti) una volta che
 questi possano indovinare o ricavare (ad esempio per tentativi)
 l'identificatore ad essa associato. Per come sono implementati gli oggetti di
 IPC infatti non esiste una maniera che  garantisca l'accesso esclusivo ad una
-coda di messaggi.  Usare \macro{IPC\_PRIVATE} o macro{IPC\_CREAT} e
-\macro{IPC\_EXCL} per \param{flag} comporta solo la creazione di una nuova
+coda di messaggi.  Usare \const{IPC\_PRIVATE} o const{IPC\_CREAT} e
+\const{IPC\_EXCL} per \param{flag} comporta solo la creazione di una nuova
 coda.
 
 \begin{table}[htb]
@@ -1300,11 +1301,11 @@ coda.
     & \textbf{Significato} \\
     \hline
     \hline
-    \macro{MSGMNI}&   16& \file{msgmni} & Numero massimo di code di
+    \const{MSGMNI}&   16& \file{msgmni} & Numero massimo di code di
                                           messaggi. \\
-    \macro{MSGMAX}& 8192& \file{msgmax} & Dimensione massima di un singolo
+    \const{MSGMAX}& 8192& \file{msgmax} & Dimensione massima di un singolo
                                           messaggio.\\
-    \macro{MSGMNB}&16384& \file{msgmnb} & Dimensione massima del contenuto di 
+    \const{MSGMNB}&16384& \file{msgmnb} & Dimensione massima del contenuto di 
                                           una coda.\\
     \hline
   \end{tabular}
@@ -1399,9 +1400,9 @@ gli altri campi invece:
   viene inizializzato al tempo corrente.
 \item il campo \var{msg\_qbytes} che esprime la dimensione massima del
   contenuto della coda (in byte) viene inizializzato al valore preimpostato
-  del sistema (\macro{MSGMNB}).
+  del sistema (\const{MSGMNB}).
 \item i campi \var{msg\_first} e \var{msg\_last} che esprimono l'indirizzo del
-  primo e ultimo messaggio sono inizializzati a \macro{NULL} e
+  primo e ultimo messaggio sono inizializzati a \val{NULL} e
   \var{msg\_cbytes}, che esprime la dimensione in byte dei messaggi presenti è
   inizializzato a zero. Questi campi sono ad uso interno dell'implementazione
   e non devono essere utilizzati da programmi in user space).
@@ -1423,15 +1424,15 @@ prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo o -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EACCES}] Si è richiesto \macro{IPC\_STAT} ma processo chiamante
-    non ha i privilegi di lettura sulla coda.
-  \item[\macro{EIDRM}] La coda richiesta è stata cancellata.
-  \item[\macro{EPERM}] Si è richiesto \macro{IPC\_SET} o \macro{IPC\_RMID} ma
+  \item[\errcode{EACCES}] Si è richiesto \const{IPC\_STAT} ma processo
+    chiamante non ha i privilegi di lettura sulla coda.
+  \item[\errcode{EIDRM}] La coda richiesta è stata cancellata.
+  \item[\errcode{EPERM}] Si è richiesto \const{IPC\_SET} o \const{IPC\_RMID} ma
     il processo non ha i privilegi, o si è richiesto di aumentare il valore di
-    \var{msg\_qbytes} oltre il limite \macro{MSGMNB} senza essere
+    \var{msg\_qbytes} oltre il limite \const{MSGMNB} senza essere
     amministratore.
   \end{errlist}
-  ed inoltre \macro{EFAULT} ed \macro{EINVAL}.
+  ed inoltre \const{EFAULT} ed \const{EINVAL}.
 }
 \end{functions}
 
@@ -1441,24 +1442,24 @@ dall'identificatore \param{msqid}. Il comportamento della funzione dipende dal
 valore dell'argomento \param{cmd}, che specifica il tipo di azione da
 eseguire; i valori possibili sono:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{IPC\_STAT}] Legge le informazioni riguardo la coda nella
+\item[\const{IPC\_STAT}] Legge le informazioni riguardo la coda nella
   struttura indicata da \param{buf}. Occorre avere il permesso di lettura
   sulla coda.
-\item[\macro{IPC\_RMID}] Rimuove la coda, cancellando tutti i dati, con
+\item[\const{IPC\_RMID}] Rimuove la coda, cancellando tutti i dati, con
   effetto immediato. Tutti i processi che cercheranno di accedere alla coda
-  riceveranno un errore di \macro{EIDRM}, e tutti processi in attesa su
+  riceveranno un errore di \errcode{EIDRM}, e tutti processi in attesa su
   funzioni di di lettura o di scrittura sulla coda saranno svegliati ricevendo
   il medesimo errore. Questo comando può essere eseguito solo da un processo
   con userid effettivo corrispondente al creatore o al proprietario della
   coda, o all'amministratore.
-\item[\macro{IPC\_SET}] Permette di modificare i permessi ed il proprietario
+\item[\const{IPC\_SET}] Permette di modificare i permessi ed il proprietario
   della coda, ed il limite massimo sulle dimensioni del totale dei messaggi in
   essa contenuti (\var{msg\_qbytes}). I valori devono essere passati in una
   struttura \var{msqid\_ds} puntata da \param{buf}.  Per modificare i valori
   di \var{msg\_perm.mode}, \var{msg\_perm.uid} e \var{msg\_perm.gid} occorre
   essere il proprietario o il creatore della coda, oppure l'amministratore; lo
   stesso vale per \var{msg\_qbytes}, ma l'amministratore ha la facoltà di
-  incrementarne il valore a limiti superiori a \macro{MSGMNB}.
+  incrementarne il valore a limiti superiori a \const{MSGMNB}.
 \end{basedescript}
 
 
@@ -1478,17 +1479,17 @@ messaggio su una coda si utilizza la funzione \func{msgsnd}; il suo prototipo
   \bodydesc{La funzione restituisce 0, e -1 in caso di errore, nel qual caso
     \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EACCES}] Non si hanno i privilegi di accesso sulla coda.
-  \item[\macro{EIDRM}] La coda è stata cancellata.
-  \item[\macro{EAGAIN}] Il messaggio non può essere inviato perché si è
+  \item[\errcode{EACCES}] Non si hanno i privilegi di accesso sulla coda.
+  \item[\errcode{EIDRM}] La coda è stata cancellata.
+  \item[\errcode{EAGAIN}] Il messaggio non può essere inviato perché si è
   superato il limite \var{msg\_qbytes} sul numero massimo di byte presenti
-  sulla coda, e si è richiesto \macro{IPC\_NOWAIT} in \param{flag}.
-  \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
-  \item[\macro{EINVAL}] Si è specificato un \param{msgid} invalido, o un
+  sulla coda, e si è richiesto \const{IPC\_NOWAIT} in \param{flag}.
+  \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+  \item[\errcode{EINVAL}] Si è specificato un \param{msgid} invalido, o un
     valore non positivo per \param{mtype}, o un valore di \param{msgsz}
-    maggiore di \macro{MSGMAX}.
+    maggiore di \const{MSGMAX}.
   \end{errlist}
-  ed inoltre \macro{EFAULT} ed \macro{ENOMEM}.
+  ed inoltre \const{EFAULT} ed \const{ENOMEM}.
 }
 \end{functions}
 
@@ -1498,7 +1499,7 @@ l'argomento \param{msgp}.  Quest'ultimo deve venire passato sempre come
 puntatore ad una struttura \var{msgbuf} analoga a quella riportata in
 \figref{fig:ipc_msbuf} che è quella che deve contenere effettivamente il
 messaggio.  La dimensione massima per il testo di un messaggio non può
-comunque superare il limite \macro{MSGMAX}.
+comunque superare il limite \const{MSGMAX}.
 
 La struttura di \figref{fig:ipc_msbuf} è comunque solo un modello, tanto che
 la definizione contenuta in \file{sys/msg.h} usa esplicitamente per il secondo
@@ -1521,7 +1522,7 @@ argomento 
 cioè \var{message} è una propria struttura che si passa alla funzione,
 \param{msgsz} dovrà essere uguale a \code{sizeof(message)-sizeof(long)}, (se
 consideriamo il caso dell'esempio in \figref{fig:ipc_msbuf}, \param{msgsz}
-dovrà essere pari a \macro{LENGTH}).
+dovrà essere pari a \const{LENGTH}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1554,16 +1555,16 @@ della funzione. Di norma, quando si specifica un valore nullo, la funzione
 ritorna immediatamente a meno che si sia ecceduto il valore di
 \var{msg\_qbytes}, o il limite di sistema sul numero di messaggi, nel qual
 caso si blocca mandando il processo in stato di \textit{sleep}.  Se si
-specifica per \param{flag} il valore \macro{IPC\_NOWAIT} la funzione opera in
+specifica per \param{flag} il valore \const{IPC\_NOWAIT} la funzione opera in
 modalità non bloccante, ed in questi casi ritorna immediatamente con un errore
-di \macro{EAGAIN}.
+di \errcode{EAGAIN}.
 
-Se non si specifica \macro{IPC\_NOWAIT} la funzione resterà bloccata fintanto
+Se non si specifica \const{IPC\_NOWAIT} la funzione resterà bloccata fintanto
 che non si liberano risorse sufficienti per poter inserire nella coda il
 messaggio, nel qual caso ritornerà normalmente. La funzione può ritornare, con
 una condizione di errore anche in due altri casi: quando la coda viene rimossa
-(nel qual caso si ha un errore di \macro{EIDRM}) o quando la funzione viene
-interrotta da un segnale (nel qual caso si ha un errore di \macro{EINTR}).
+(nel qual caso si ha un errore di \errcode{EIDRM}) o quando la funzione viene
+interrotta da un segnale (nel qual caso si ha un errore di \errcode{EINTR}).
 
 Una volta completato con successo l'invio del messaggio sulla coda, la
 funzione aggiorna i dati mantenuti in \var{msqid\_ds}, in particolare vengono
@@ -1591,16 +1592,16 @@ La funzione che viene utilizzata per estrarre un messaggio da una coda 
     successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà uno
     dei valori:
   \begin{errlist}
-  \item[\macro{EACCES}] Non si hanno i privilegi di accesso sulla coda.
-  \item[\macro{EIDRM}] La coda è stata cancellata.
-  \item[\macro{E2BIG}] Il testo del messaggio è più lungo di \param{msgsz} e
-  non si è specificato \macro{MSG\_NOERROR} in \param{msgflg}.
-  \item[\macro{EINTR}] La funzione è stata interrotta da un segnale mentre era
-  in attesa di ricevere un messaggio.
-  \item[\macro{EINVAL}] Si è specificato un \param{msgid} invalido o un valore
-    di \param{msgsz} negativo.
+  \item[\errcode{EACCES}] Non si hanno i privilegi di accesso sulla coda.
+  \item[\errcode{EIDRM}] La coda è stata cancellata.
+  \item[\errcode{E2BIG}] Il testo del messaggio è più lungo di \param{msgsz} e
+    non si è specificato \const{MSG\_NOERROR} in \param{msgflg}.
+  \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale mentre
+    era in attesa di ricevere un messaggio.
+  \item[\errcode{EINVAL}] Si è specificato un \param{msgid} invalido o un
+    valore di \param{msgsz} negativo.
   \end{errlist}
-  ed inoltre \macro{EFAULT}.
+  ed inoltre \const{EFAULT}.
 }
 \end{functions}
 
@@ -1608,14 +1609,14 @@ La funzione legge un messaggio dalla coda specificata, scrivendolo sulla
 struttura puntata da \param{msgp}, che dovrà avere un formato analogo a quello
 di \figref{fig:ipc_msbuf}.  Una volta estratto, il messaggio sarà rimosso dalla
 coda.  L'argomento \param{msgsz} indica la lunghezza massima del testo del
-messaggio (equivalente al valore del parametro \macro{LENGTH} nell'esempio di
+messaggio (equivalente al valore del parametro \const{LENGTH} nell'esempio di
 \figref{fig:ipc_msbuf}).
 
 Se il testo del messaggio ha lunghezza inferiore a \param{msgsz} esso viene
 rimosso dalla coda; in caso contrario, se \param{msgflg} è impostato a
-\macro{MSG\_NOERROR}, il messaggio viene troncato e la parte in eccesso viene
+\const{MSG\_NOERROR}, il messaggio viene troncato e la parte in eccesso viene
 perduta, altrimenti il messaggio non viene estratto e la funzione ritorna con
-un errore di \macro{E2BIG}.
+un errore di \errcode{E2BIG}.
 
 L'argomento \param{msgtyp} permette di restringere la ricerca ad un
 sottoinsieme dei messaggi presenti sulla coda; la ricerca infatti è fatta con
@@ -1636,20 +1637,20 @@ coda, 
 
 Il valore di \param{msgflg} permette di controllare il comportamento della
 funzione, esso può essere nullo o una maschera binaria composta da uno o più
-valori.  Oltre al precedente \macro{MSG\_NOERROR}, sono possibili altri due
-valori: \macro{MSG\_EXCEPT}, che permette, quando \param{msgtyp} è positivo,
+valori.  Oltre al precedente \const{MSG\_NOERROR}, sono possibili altri due
+valori: \const{MSG\_EXCEPT}, che permette, quando \param{msgtyp} è positivo,
 di leggere il primo messaggio nella coda con tipo diverso da \param{msgtyp}, e
-\macro{IPC\_NOWAIT} che causa il ritorno immediato della funzione quando non
+\const{IPC\_NOWAIT} che causa il ritorno immediato della funzione quando non
 ci sono messaggi sulla coda.
 
 Il comportamento usuale della funzione infatti, se non ci sono messaggi
 disponibili per la lettura, è di bloccare il processo in stato di
-\textit{sleep}. Nel caso però si sia specificato \macro{IPC\_NOWAIT} la
-funzione ritorna immediatamente con un errore \macro{ENOMSG}. Altrimenti la
+\textit{sleep}. Nel caso però si sia specificato \const{IPC\_NOWAIT} la
+funzione ritorna immediatamente con un errore \errcode{ENOMSG}. Altrimenti la
 funzione ritorna normalmente non appena viene inserito un messaggio del tipo
 desiderato, oppure ritorna con errore qualora la coda sia rimossa (con
-\var{errno} impostata a \macro{EIDRM}) o se il processo viene interrotto da un
-segnale (con \var{errno} impostata a \macro{EINTR}).
+\var{errno} impostata a \errcode{EIDRM}) o se il processo viene interrotto da
+un segnale (con \var{errno} impostata a \errcode{EINTR}).
 
 Una volta completata con successo l'estrazione del messaggio dalla coda, la
 funzione aggiorna i dati mantenuti in \var{msqid\_ds}, in particolare vengono
@@ -1781,7 +1782,7 @@ principale (\texttt{\small 32--41}). Questo inizia (\texttt{\small 33}) con il
 porsi in attesa di un messaggio di richiesta da parte di un client; si noti
 infatti come \func{msgrcv} richieda un messaggio con \var{mtype} uguale a 1:
 questo è il valore usato per le richieste dato che corrisponde al \acr{pid} di
-\cmd{init}, che non può essere un client. L'uso del flag \macro{MSG\_NOERROR}
+\cmd{init}, che non può essere un client. L'uso del flag \const{MSG\_NOERROR}
 è solo per sicurezza, dato che i messaggi di richiesta sono di dimensione
 fissa (e contengono solo il \acr{pid} del client).
 
@@ -1931,18 +1932,18 @@ permette di creare o ottenere l'identificatore di un insieme di semafori 
   \bodydesc{La funzione restituisce l'identificatore (un intero positivo) o -1
     in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ENOSPC}] Si è cercato di creare una insieme di semafori
+    \item[\errcode{ENOSPC}] Si è cercato di creare una insieme di semafori
       quando è stato superato o il limite per il numero totale di semafori
-      (\macro{SEMMNS}) o quello per il numero totale degli insiemi
-      (\macro{SEMMNI}) nel sistema.
-    \item[\macro{EINVAL}] L'argomento \param{nsems} è minore di zero o
+      (\const{SEMMNS}) o quello per il numero totale degli insiemi
+      (\const{SEMMNI}) nel sistema.
+    \item[\errcode{EINVAL}] L'argomento \param{nsems} è minore di zero o
       maggiore del limite sul numero di semafori per ciascun insieme
-      (\macro{SEMMSL}), o se l'insieme già esiste, maggiore del numero di
+      (\const{SEMMSL}), o se l'insieme già esiste, maggiore del numero di
       semafori che contiene.
-    \item[\macro{ENOMEM}] Il sistema non ha abbastanza memoria per poter
+    \item[\errcode{ENOMEM}] Il sistema non ha abbastanza memoria per poter
       contenere le strutture per un nuovo insieme di semafori.
     \end{errlist}
-    ed inoltre \macro{EACCES}, \macro{ENOENT}, \macro{EEXIST}, \macro{EIDRM},
+    ed inoltre \const{EACCES}, \const{ENOENT}, \const{EEXIST}, \const{EIDRM},
     con lo stesso significato che hanno per \func{msgget}.}
 \end{functions}
 
@@ -2061,16 +2062,16 @@ indicano rispettivamente:
     \textbf{Costante} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{SEMMNI}&          128 & Numero massimo di insiemi di semafori. \\
-    \macro{SEMMSL}&          250 & Numero massimo di semafori per insieme.\\
-    \macro{SEMMNS}&\macro{SEMMNI}*\macro{SEMMSL}& Numero massimo di semafori
+    \const{SEMMNI}&          128 & Numero massimo di insiemi di semafori. \\
+    \const{SEMMSL}&          250 & Numero massimo di semafori per insieme.\\
+    \const{SEMMNS}&\const{SEMMNI}*\const{SEMMSL}& Numero massimo di semafori
                                    nel sistema .\\
-    \macro{SEMVMX}&        32767 & Massimo valore per un semaforo.\\
-    \macro{SEMOPM}&           32 & Massimo numero di operazioni per chiamata a
+    \const{SEMVMX}&        32767 & Massimo valore per un semaforo.\\
+    \const{SEMOPM}&           32 & Massimo numero di operazioni per chiamata a
                                    \func{semop}. \\
-    \macro{SEMMNU}&\macro{SEMMNS}& Massimo numero di strutture di ripristino.\\
-    \macro{SEMUME}&\macro{SEMOPM}& Massimo numero di voci di ripristino.\\
-    \macro{SEMAEM}&\macro{SEMVMX}& valore massimo per l'aggiustamento
+    \const{SEMMNU}&\const{SEMMNS}& Massimo numero di strutture di ripristino.\\
+    \const{SEMUME}&\const{SEMOPM}& Massimo numero di voci di ripristino.\\
+    \const{SEMAEM}&\const{SEMVMX}& valore massimo per l'aggiustamento
                                    all'uscita. \\
     \hline
   \end{tabular}
@@ -2103,16 +2104,16 @@ loro inizializzazione) 
     quattro. In caso di errore restituisce -1, ed \var{errno} assumerà uno dei
     valori:
     \begin{errlist}
-    \item[\macro{EACCES}] Il processo non ha i privilegi per eseguire
+    \item[\errcode{EACCES}] Il processo non ha i privilegi per eseguire
       l'operazione richiesta.
-    \item[\macro{EIDRM}] L'insieme di semafori è stato cancellato.
-    \item[\macro{EPERM}] Si è richiesto \macro{IPC\_SET} o \macro{IPC\_RMID} ma
-      il processo non ha  privilegi sufficienti ad eseguire l'operazione.
-    \item[\macro{ERANGE}] Si è richiesto \macro{SETALL} \macro{SETVAL} ma il
+    \item[\errcode{EIDRM}] L'insieme di semafori è stato cancellato.
+    \item[\errcode{EPERM}] Si è richiesto \const{IPC\_SET} o \const{IPC\_RMID}
+      ma il processo non ha privilegi sufficienti ad eseguire l'operazione.
+    \item[\errcode{ERANGE}] Si è richiesto \const{SETALL} \const{SETVAL} ma il
       valore a cui si vuole impostare il semaforo è minore di zero o maggiore
-      di \macro{SEMVMX}.
+      di \const{SEMVMX}.
   \end{errlist}
-  ed inoltre \macro{EFAULT} ed \macro{EINVAL}.
+  ed inoltre \const{EFAULT} ed \const{EINVAL}.
 }
 \end{functions}
 
@@ -2149,61 +2150,61 @@ assumere, 
 Come già accennato sia il comportamento della funzione che il numero di
 parametri con cui deve essere invocata, dipendono dal valore dell'argomento
 \param{cmd}, che specifica l'azione da intraprendere; i valori validi (che
-cioè non causano un errore di \macro{EINVAL}) per questo argomento sono i
+cioè non causano un errore di \errcode{EINVAL}) per questo argomento sono i
 seguenti:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{IPC\_STAT}] Legge i dati dell'insieme di semafori, copiando il
+\item[\const{IPC\_STAT}] Legge i dati dell'insieme di semafori, copiando il
   contenuto della relativa struttura \var{semid\_ds} all'indirizzo specificato
   con \var{arg.buf}. Occorre avere il permesso di lettura. L'argomento
   \param{semnum} viene ignorato.
-\item[\macro{IPC\_RMID}] Rimuove l'insieme di semafori e le relative strutture
+\item[\const{IPC\_RMID}] Rimuove l'insieme di semafori e le relative strutture
   dati, con effetto immediato. Tutti i processi che erano stato di
-  \textit{sleep} vengono svegliati, ritornando con un errore di \macro{EIDRM}.
-  L'userid effettivo del processo deve corrispondere o al creatore o al
-  proprietario dell'insieme, o all'amministratore. L'argomento \param{semnum}
-  viene ignorato.
-\item[\macro{IPC\_SET}] Permette di modificare i permessi ed il proprietario
+  \textit{sleep} vengono svegliati, ritornando con un errore di
+  \errcode{EIDRM}.  L'userid effettivo del processo deve corrispondere o al
+  creatore o al proprietario dell'insieme, o all'amministratore. L'argomento
+  \param{semnum} viene ignorato.
+\item[\const{IPC\_SET}] Permette di modificare i permessi ed il proprietario
   dell'insieme. I valori devono essere passati in una struttura
   \var{semid\_ds} puntata da \param{arg.buf} di cui saranno usati soltanto i
   campi \var{sem\_perm.uid}, \var{sem\_perm.gid} e i nove bit meno
   significativi di \var{sem\_perm.mode}. L'userid effettivo del processo deve
   corrispondere o al creatore o al proprietario dell'insieme, o
   all'amministratore.  L'argomento \param{semnum} viene ignorato.
-\item[\macro{GETALL}] Restituisce il valore corrente di ciascun semaforo
+\item[\const{GETALL}] Restituisce il valore corrente di ciascun semaforo
   dell'insieme (corrispondente al campo \var{semval} di \var{sem}) nel vettore
   indicato da \param{arg.array}. Occorre avere il permesso di lettura.
   L'argomento \param{semnum} viene ignorato.
-\item[\macro{GETNCNT}] Restituisce come valore di ritorno della funzione il
+\item[\const{GETNCNT}] Restituisce come valore di ritorno della funzione il
   numero di processi in attesa che il semaforo \param{semnum} dell'insieme
   \param{semid} venga incrementato (corrispondente al campo \var{semncnt} di
   \var{sem}); va invocata con tre argomenti.  Occorre avere il permesso di
   lettura.
-\item[\macro{GETPID}] Restituisce come valore di ritorno della funzione il
+\item[\const{GETPID}] Restituisce come valore di ritorno della funzione il
   \acr{pid} dell'ultimo processo che ha compiuto una operazione sul semaforo
   \param{semnum} dell'insieme \param{semid} (corrispondente al campo
   \var{sempid} di \var{sem}); va invocata con tre argomenti.  Occorre avere il
   permesso di lettura.
-\item[\macro{GETVAL}] Restituisce come valore di ritorno della funzione il il
+\item[\const{GETVAL}] Restituisce come valore di ritorno della funzione il il
   valore corrente del semaforo \param{semnum} dell'insieme \param{semid}
   (corrispondente al campo \var{semval} di \var{sem}); va invocata con tre
   argomenti.  Occorre avere il permesso di lettura.
-\item[\macro{GETZCNT}] Restituisce come valore di ritorno della funzione il
+\item[\const{GETZCNT}] Restituisce come valore di ritorno della funzione il
   numero di processi in attesa che il valore del semaforo \param{semnum}
   dell'insieme \param{semid} diventi nullo (corrispondente al campo
   \var{semncnt} di \var{sem}); va invocata con tre argomenti.  Occorre avere
   il permesso di lettura.
-\item[\macro{SETALL}] Inizializza il valore di tutti i semafori dell'insieme,
+\item[\const{SETALL}] Inizializza il valore di tutti i semafori dell'insieme,
   aggiornando il campo \var{sem\_ctime} di \var{semid\_ds}. I valori devono
   essere passati nel vettore indicato da \param{arg.array}.  Si devono avere i
   privilegi di scrittura sul semaforo.  L'argomento \param{semnum} viene
   ignorato.
-\item[\macro{SETVAL}] Inizializza il semaforo \param{semnum} al valore passato
+\item[\const{SETVAL}] Inizializza il semaforo \param{semnum} al valore passato
   dall'argomento \param{arg.val}, aggiornando il campo \var{sem\_ctime} di
   \var{semid\_ds}.  Si devono avere i privilegi di scrittura sul semaforo.
 \end{basedescript}
 
 Quando si imposta il valore di un semaforo (sia che lo si faccia per tutto
-l'insieme con \macro{SETALL}, che per un solo semaforo con \macro{SETVAL}), i
+l'insieme con \const{SETALL}, che per un solo semaforo con \const{SETVAL}), i
 processi in attesa su di esso reagiscono di conseguenza al cambiamento di
 valore.  Inoltre la coda delle operazioni di ripristino viene cancellata per
 tutti i semafori il cui valore viene modificato.
@@ -2216,10 +2217,10 @@ tutti i semafori il cui valore viene modificato.
     \textbf{Operazione}  & \textbf{Valore restituito} \\
     \hline
     \hline
-    \macro{GETNCNT}& valore di \var{semncnt}.\\
-    \macro{GETPID} & valore di \var{sempid}.\\
-    \macro{GETVAL} & valore di \var{semval}.\\
-    \macro{GETZCNT}& valore di \var{semzcnt}.\\
+    \const{GETNCNT}& valore di \var{semncnt}.\\
+    \const{GETPID} & valore di \var{sempid}.\\
+    \const{GETVAL} & valore di \var{semval}.\\
+    \const{GETZCNT}& valore di \var{semzcnt}.\\
     \hline
   \end{tabular}
   \caption{Valori di ritorno della funzione \func{semctl}.} 
@@ -2248,21 +2249,21 @@ vengono effettuate con la funzione \func{semop}, 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{EACCES}] Il processo non ha i privilegi per eseguire
+    \item[\errcode{EACCES}] Il processo non ha i privilegi per eseguire
       l'operazione richiesta.
-    \item[\macro{EIDRM}] L'insieme di semafori è stato cancellato.
-    \item[\macro{ENOMEM}] Si è richiesto un \macro{SEM\_UNDO} ma il sistema
+    \item[\errcode{EIDRM}] L'insieme di semafori è stato cancellato.
+    \item[\errcode{ENOMEM}] Si è richiesto un \const{SEM\_UNDO} ma il sistema
       non ha le risorse per allocare la struttura di ripristino.
-    \item[\macro{EAGAIN}] Un'operazione comporterebbe il blocco del processo,
-      ma si è specificato \macro{IPC\_NOWAIT} in \var{sem\_flg}.
-    \item[\macro{EINTR}] La funzione, bloccata in attesa dell'esecuzione
+    \item[\errcode{EAGAIN}] Un'operazione comporterebbe il blocco del processo,
+      ma si è specificato \const{IPC\_NOWAIT} in \var{sem\_flg}.
+    \item[\errcode{EINTR}] La funzione, bloccata in attesa dell'esecuzione
       dell'operazione, viene interrotta da un segnale.
-    \item[\macro{E2BIG}] L'argomento \param{nsops} è maggiore del numero
-      massimo di operazioni \macro{SEMOPM}.
-    \item[\macro{ERANGE}] Per alcune operazioni il valore risultante del
-      semaforo viene a superare il limite massimo \macro{SEMVMX}.
+    \item[\errcode{E2BIG}] L'argomento \param{nsops} è maggiore del numero
+      massimo di operazioni \const{SEMOPM}.
+    \item[\errcode{ERANGE}] Per alcune operazioni il valore risultante del
+      semaforo viene a superare il limite massimo \const{SEMVMX}.
   \end{errlist}
-  ed inoltre \macro{EFAULT} ed \macro{EINVAL}.
+  ed inoltre \const{EFAULT} ed \const{EINVAL}.
 }
 \end{functions}
 
@@ -2303,11 +2304,11 @@ vettore, per cui il primo semaforo corrisponde ad un valore nullo di
 \var{sem\_num}.
 
 Il campo \var{sem\_flg} è un flag, mantenuto come maschera binaria, per il
-quale possono essere impostati i due valori \macro{IPC\_NOWAIT} e
-\macro{SEM\_UNDO}.  Impostando \macro{IPC\_NOWAIT} si fa si che, invece di
+quale possono essere impostati i due valori \const{IPC\_NOWAIT} e
+\const{SEM\_UNDO}.  Impostando \const{IPC\_NOWAIT} si fa si che, invece di
 bloccarsi (in tutti quei casi in cui l'esecuzione di una operazione richiede
 che il processo vada in stato di \textit{sleep}), \func{semop} ritorni
-immediatamente con un errore di \macro{EAGAIN}.  Impostando \macro{SEM\_UNDO}
+immediatamente con un errore di \errcode{EAGAIN}.  Impostando \const{SEM\_UNDO}
 si richiede invece che l'operazione venga registrata in modo che il valore del
 semaforo possa essere ripristinato all'uscita del processo.
 
@@ -2317,26 +2318,26 @@ possibili:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\var{sem\_op}$>0$] In questo caso il valore di \var{sem\_op} viene
   aggiunto al valore corrente di \var{semval}. La funzione ritorna
-  immediatamente (con un errore di \macro{ERANGE} qualora si sia superato il
-  limite \macro{SEMVMX}) ed il processo non viene bloccato in nessun caso.
-  Specificando \macro{SEM\_UNDO} si aggiorna il contatore per il ripristino
+  immediatamente (con un errore di \errcode{ERANGE} qualora si sia superato il
+  limite \const{SEMVMX}) ed il processo non viene bloccato in nessun caso.
+  Specificando \const{SEM\_UNDO} si aggiorna il contatore per il ripristino
   del valore del semaforo. Al processo chiamante è richiesto il privilegio di
   alterazione (scrittura) sull'insieme di semafori.
   
 \item[\var{sem\_op}$=0$] Nel caso \var{semval} sia zero l'esecuzione procede
   immediatamente. Se \var{semval} è diverso da zero il comportamento è
-  controllato da \var{sem\_flg}, se è stato impostato \macro{IPC\_NOWAIT} la
-  funzione ritorna con un errore di \macro{EAGAIN}, altrimenti viene
+  controllato da \var{sem\_flg}, se è stato impostato \const{IPC\_NOWAIT} la
+  funzione ritorna con un errore di \errcode{EAGAIN}, altrimenti viene
   incrementato \var{semzcnt} di uno ed il processo resta in stato di
   \textit{sleep} fintanto che non si ha una delle condizioni seguenti:
   \begin{itemize*}
   \item \var{semval} diventa zero, nel qual caso \var{semzcnt} viene
     decrementato di uno.
   \item l'insieme di semafori viene rimosso, nel qual caso \func{semop} ritorna
-    un errore di \macro{EIDRM}.
+    un errore di \errcode{EIDRM}.
   \item il processo chiamante riceve un segnale, nel qual caso \var{semzcnt}
     viene decrementato di uno e \func{semop} ritorna un errore di
-    \macro{EINTR}.
+    \errcode{EINTR}.
   \end{itemize*}
   Al processo chiamante è richiesto il privilegio di lettura dell'insieme dei
   semafori.
@@ -2344,24 +2345,24 @@ possibili:
 \item[\var{sem\_op}$<0$] Nel caso in cui \var{semval} è maggiore o uguale del
   valore assoluto di \var{sem\_op} (se cioè la somma dei due valori resta
   positiva o nulla) i valori vengono sommati e la funzione ritorna
-  immediatamente; qualora si sia impostato \macro{SEM\_UNDO} viene anche
+  immediatamente; qualora si sia impostato \const{SEM\_UNDO} viene anche
   aggiornato il contatore per il ripristino del valore del semaforo. In caso
   contrario (quando cioè la somma darebbe luogo ad un valore di \var{semval}
-  negativo) se si è impostato \macro{IPC\_NOWAIT} la funzione ritorna con un
-  errore di \macro{EAGAIN}, altrimenti viene incrementato di uno \var{semncnt}
-  ed il processo resta in stato di \textit{sleep} fintanto che non si ha una
-  delle condizioni seguenti:
+  negativo) se si è impostato \const{IPC\_NOWAIT} la funzione ritorna con un
+  errore di \errcode{EAGAIN}, altrimenti viene incrementato di uno
+  \var{semncnt} ed il processo resta in stato di \textit{sleep} fintanto che
+  non si ha una delle condizioni seguenti:
   \begin{itemize*}
   \item \var{semval} diventa maggiore o uguale del valore assoluto di
     \var{sem\_op}, nel qual caso \var{semncnt} viene decrementato di uno, il
     valore di \var{sem\_op} viene sommato a \var{semval}, e se era stato
-    impostato \macro{SEM\_UNDO} viene aggiornato il contatore per il
+    impostato \const{SEM\_UNDO} viene aggiornato il contatore per il
     ripristino del valore del semaforo.
-  \item l'insieme di semafori viene rimosso, nel qual caso \func{semop} ritorna
-    un errore di \macro{EIDRM}.
+  \item l'insieme di semafori viene rimosso, nel qual caso \func{semop}
+    ritorna un errore di \errcode{EIDRM}.
   \item il processo chiamante riceve un segnale, nel qual caso \var{semncnt}
     viene decrementato di uno e \func{semop} ritorna un errore di
-    \macro{EINTR}.
+    \errcode{EINTR}.
   \end{itemize*}    
   Al processo chiamante è richiesto il privilegio di alterazione (scrittura)
   sull'insieme di semafori.
@@ -2375,7 +2376,7 @@ vengono pure aggiornati al tempo corrente i campi \var{sem\_otime} e
 Dato che, come già accennato in precedenza, in caso di uscita inaspettata i
 semafori possono restare occupati, abbiamo visto come \func{semop} permetta di
 attivare un meccanismo di ripristino attraverso l'uso del flag
-\macro{SEM\_UNDO}. Il meccanismo è implementato tramite una apposita struttura
+\const{SEM\_UNDO}. Il meccanismo è implementato tramite una apposita struttura
 \var{sem\_undo}, associata ad ogni processo per ciascun semaforo che esso ha
 modificato; all'uscita i semafori modificati vengono ripristinati, e le
 strutture disallocate.  Per mantenere coerente il comportamento queste
@@ -2421,7 +2422,7 @@ viene ripetuto fin quando non ci sono pi
 svuotata la coda.
 
 Per gestire il meccanismo del ripristino tutte le volte che per un'operazione
-si è specificato il flag \macro{SEM\_UNDO} viene mantenuta per ciascun insieme
+si è specificato il flag \const{SEM\_UNDO} viene mantenuta per ciascun insieme
 di semafori una apposita struttura \var{sem\_undo} che contiene (nel vettore
 puntato dal campo \var{semadj}) un valore di aggiustamento per ogni semaforo
 cui viene sommato l'opposto del valore usato per l'operazione. 
@@ -2528,11 +2529,11 @@ int MutexUnlock(int sem_id)
 La prima funzione (\texttt{\small 1--17}) è \func{MutexCreate} che data una
 chiave crea il semaforo usato per il mutex e lo inizializza, restituendone
 l'identificatore. Il primo passo (\texttt{\small 8}) è chiamare \func{semget}
-con \macro{IPC\_CREATE} per creare il semaforo qualora non esista,
+con \const{IPC\_CREATE} per creare il semaforo qualora non esista,
 assegnandogli i privilegi di lettura e scrittura per tutti. In caso di errore
 (\texttt{\small 9--11}) si ritorna subito il risultato di \func{semget},
 altrimenti (\texttt{\small 12}) si inizializza il semaforo chiamando
-\func{semctl} con il comando \macro{SETVAL}, utilizzando l'unione
+\func{semctl} con il comando \const{SETVAL}, utilizzando l'unione
 \var{semunion} dichiarata ed avvalorata in precedenza (\texttt{\small 6}) ad 1
 per significare che risorsa è libera. In caso di errore (\texttt{\small
   13--16}) si restituisce il valore di ritorno di \func{semctl}, altrimenti si
@@ -2552,7 +2553,7 @@ funzione.
 La terza funzione (\texttt{\small 25--31}) è \func{MutexRead} che, dato
 l'identificatore, restituisce il valore del mutex. Anche in questo caso la
 funzione è un \textit{wrapper} per la chiamata di \func{semctl}, questa volta
-con il comando \macro{GETVAL}, che permette di restituire il valore del
+con il comando \const{GETVAL}, che permette di restituire il valore del
 semaforo.
 
 La quarta e la quinta funzione (\texttt{\small 43--56}) sono \func{MutexLock},
@@ -2560,7 +2561,7 @@ e \func{MutexUnlock}, che permettono rispettivamente di bloccare e sbloccare
 il mutex. Entrambe fanno da wrapper per \func{semop}, utilizzando le due
 strutture \var{sem\_lock} e \var{sem\_unlock} definite in precedenza
 (\texttt{\small 32--42}). Si noti come per queste ultime si sia fatto uso
-dell'opzione \macro{SEM\_UNDO} per evitare che il semaforo resti bloccato in
+dell'opzione \const{SEM\_UNDO} per evitare che il semaforo resti bloccato in
 caso di terminazione imprevista del processo.%%  Si noti infine come, essendo
 %% tutte le funzioni riportate in \figref{fig:ipc_mutex_create} estremamente
 %% semplici, se si sono definite tutte come \ctyp{inline}.\footnote{la direttiva
@@ -2612,17 +2613,17 @@ ed il suo prototipo 
   \bodydesc{La funzione restituisce l'identificatore (un intero positivo) o -1
     in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ENOSPC}] Si è superato il limite (\macro{SHMMNI}) sul numero
+    \item[\errcode{ENOSPC}] Si è superato il limite (\const{SHMMNI}) sul numero
       di segmenti di memoria nel sistema, o cercato di allocare un segmento le
-      cui dimensioni fanno superare il limite di sistema (\macro{SHMALL}) per
+      cui dimensioni fanno superare il limite di sistema (\const{SHMALL}) per
       la memoria ad essi riservata.
-    \item[\macro{EINVAL}] Si è richiesta una dimensione per un nuovo segmento
-      maggiore di \macro{SHMMAX} o minore di \macro{SHMMIN}, o se il segmento
+    \item[\errcode{EINVAL}] Si è richiesta una dimensione per un nuovo segmento
+      maggiore di \const{SHMMAX} o minore di \const{SHMMIN}, o se il segmento
       già esiste \param{size} è maggiore delle sue dimensioni.
-    \item[\macro{ENOMEM}] Il sistema non ha abbastanza memoria per poter
+    \item[\errcode{ENOMEM}] Il sistema non ha abbastanza memoria per poter
       contenere le strutture per un nuovo segmento di memoria condivisa.
     \end{errlist}
-    ed inoltre \macro{EACCES}, \macro{ENOENT}, \macro{EEXIST}, \macro{EIDRM},
+    ed inoltre \const{EACCES}, \const{ENOENT}, \const{EEXIST}, \const{EIDRM},
     con lo stesso significato che hanno per \func{msgget}.}
 \end{functions}
 
@@ -2630,7 +2631,7 @@ La funzione, come \func{semget}, 
 identico è l'uso degli argomenti \param{key} e \param{flag} per cui non
 ripeteremo quanto detto al proposito in \secref{sec:ipc_sysv_mq}. L'argomento
 \param{size} specifica invece la dimensione, in byte, del segmento, che viene
-comunque arrotondata al multiplo superiore di \macro{PAGE\_SIZE}.
+comunque arrotondata al multiplo superiore di \const{PAGE\_SIZE}.
 
 La memoria condivisa è la forma più veloce di comunicazione fra due processi,
 in quanto permette agli stessi di vedere nel loro spazio di indirizzi una
@@ -2715,21 +2716,21 @@ che permettono di cambiarne il valore.
     & \textbf{Significato} \\
     \hline
     \hline
-    \macro{SHMALL}& 0x200000&\file{shmall}& Numero massimo di pagine che 
+    \const{SHMALL}& 0x200000&\file{shmall}& Numero massimo di pagine che 
                                        possono essere usate per i segmenti di
                                        memoria condivisa. \\
-    \macro{SHMMAX}&0x2000000&\file{shmmax}& Dimensione massima di un segmento 
+    \const{SHMMAX}&0x2000000&\file{shmmax}& Dimensione massima di un segmento 
                                             di memoria condivisa.\\
-    \macro{SHMMNI}&     4096&\file{msgmni}& Numero massimo di segmenti di 
+    \const{SHMMNI}&     4096&\file{msgmni}& Numero massimo di segmenti di 
                                             memoria condivisa presenti nel
                                             kernel.\\ 
-    \macro{SHMMIN}&        1& ---         & Dimensione minima di un segmento di
+    \const{SHMMIN}&        1& ---         & Dimensione minima di un segmento di
                                             memoria condivisa. \\
-    \macro{SHMLBA}&\macro{PAGE\_SIZE}&--- & Limite inferiore per le dimensioni
+    \const{SHMLBA}&\const{PAGE\_SIZE}&--- & Limite inferiore per le dimensioni
                                             minime di un segmento (deve essere
                                             allineato alle dimensioni di una
                                             pagina di memoria). \\
-    \macro{SHMSEG}&   ---   &     ---     & Numero massimo di segmenti di
+    \const{SHMSEG}&   ---   &     ---     & Numero massimo di segmenti di
                                             memoria condivisa 
                                             per ciascun processo.\\
 
@@ -2755,42 +2756,42 @@ un segmento di memoria condivisa 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{EACCES}] Si è richiesto \macro{IPC\_STAT} ma i permessi non
+    \item[\errcode{EACCES}] Si è richiesto \const{IPC\_STAT} ma i permessi non
       consentono l'accesso in lettura al segmento.
-    \item[\macro{EINVAL}] O \param{shmid} o \param{cmd} hanno valori non
+    \item[\errcode{EINVAL}] O \param{shmid} o \param{cmd} hanno valori non
       validi.
-    \item[\macro{EIDRM}] L'argomento \param{shmid} fa riferimento ad un
+    \item[\errcode{EIDRM}] L'argomento \param{shmid} fa riferimento ad un
       segmento che è stato cancellato.
-    \item[\macro{EPERM}] Si è specificato un comando con \macro{IPC\_SET} o
-      \macro{IPC\_RMID} senza i permessi necessari.
-    \item[\macro{EOVERFLOW}] L'argomento \param{shmid} fa riferimento ad un
+    \item[\errcode{EPERM}] Si è specificato un comando con \const{IPC\_SET} o
+      \const{IPC\_RMID} senza i permessi necessari.
+    \item[\errcode{EOVERFLOW}] L'argomento \param{shmid} fa riferimento ad un
       segmento che è stato cancellato.
     \end{errlist}
-  ed inoltre \macro{EFAULT}.}
+  ed inoltre \const{EFAULT}.}
 \end{functions}
 
 Il comportamento della funzione dipende dal valore del comando passato
 attraverso l'argomento \param{cmd}, i valori possibili sono i seguenti:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{IPC\_STAT}] Legge le informazioni riguardo il segmento di memoria
+\item[\const{IPC\_STAT}] Legge le informazioni riguardo il segmento di memoria
   condivisa nella struttura \var{shmid\_ds} puntata da \param{buf}. Occorre
   avere il permesso di lettura sulla coda.
-\item[\macro{IPC\_RMID}] Marca il segmento di memoria condivisa per la
+\item[\const{IPC\_RMID}] Marca il segmento di memoria condivisa per la
   rimozione, questo verrà cancellato effettivamente solo quando l'ultimo
   processo ad esso agganciato si sarà staccato. Questo comando può essere
   eseguito solo da un processo con userid effettivo corrispondente o al
   creatore della coda, o al proprietario della coda, o all'amministratore.
-\item[\macro{IPC\_SET}] Permette di modificare i permessi ed il proprietario
+\item[\const{IPC\_SET}] Permette di modificare i permessi ed il proprietario
   del segmento.  Per modificare i valori di \var{shm\_perm.mode},
   \var{shm\_perm.uid} e \var{shm\_perm.gid} occorre essere il proprietario o
   il creatore della coda, oppure l'amministratore. Compiuta l'operazione
   aggiorna anche il valore del campo \var{shm\_ctime}.
-\item[\macro{SHM\_LOCK}] Abilita il \textit{memory locking}\index{memory
+\item[\const{SHM\_LOCK}] Abilita il \textit{memory locking}\index{memory
     locking}\footnote{impedisce cioè che la memoria usata per il segmento
     venga salvata su disco dal meccanismo della memoria virtuale; si ricordi
     quanto trattato in \secref{sec:proc_mem_lock}.} sul segmento di memoria
   condivisa. Solo l'amministratore può utilizzare questo comando.
-\item[\macro{SHM\_UNLOCK}] Disabilita il \textit{memory locking} sul segmento
+\item[\const{SHM\_UNLOCK}] Disabilita il \textit{memory locking} sul segmento
   di memoria condivisa. Solo l'amministratore può utilizzare questo comando.
 \end{basedescript}
 i primi tre comandi sono gli stessi già visti anche per le code ed i semafori,
@@ -2811,13 +2812,13 @@ indirizzi; il suo prototipo 
     successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà i
     valori:
     \begin{errlist}
-    \item[\macro{EACCES}] Il processo non ha i privilegi per accedere al
+    \item[\errcode{EACCES}] Il processo non ha i privilegi per accedere al
       segmento nella modalità richiesta.
-    \item[\macro{EINVAL}] Si è specificato un identificatore invalido per
+    \item[\errcode{EINVAL}] Si è specificato un identificatore invalido per
       \param{shmid}, o un indirizzo non allineato sul confine di una pagina
       per \param{shmaddr}.
     \end{errlist}
-    ed inoltre \macro{ENOMEM}.}
+    ed inoltre \const{ENOMEM}.}
 \end{functions}
 
 La funzione inserisce un segmento di memoria condivisa all'interno dello
@@ -2844,14 +2845,14 @@ L'argomento \param{shmaddr} specifica a quale indirizzo\footnote{Lo standard
   \acr{libc4} e le \acr{libc5}, con il passaggio alle \acr{glibc} il tipo di
   \param{shmaddr} è divenuto un \ctyp{const void *} e quello del valore di
   ritorno un \ctyp{void *}.} deve essere associato il segmento, se il valore
-specificato è \macro{NULL} è il sistema a scegliere opportunamente un'area di
+specificato è \val{NULL} è il sistema a scegliere opportunamente un'area di
 memoria libera (questo è il modo più portabile e sicuro di usare la funzione).
 Altrimenti il kernel aggancia il segmento all'indirizzo specificato da
 \param{shmaddr}; questo però può avvenire solo se l'indirizzo coincide con il
 limite di una pagina, cioè se è un multiplo esatto del parametro di sistema
-\macro{SHMLBA}, che in Linux è sempre uguale \macro{PAGE\_SIZE}. 
+\const{SHMLBA}, che in Linux è sempre uguale \const{PAGE\_SIZE}. 
 
-Si tenga presente però che quando si usa \macro{NULL} come valore di
+Si tenga presente però che quando si usa \val{NULL} come valore di
 \param{shmaddr}, l'indirizzo restituito da \func{shmat} può cambiare da
 processo a processo; pertanto se nell'area di memoria condivisa si salvano
 anche degli indirizzi, si deve avere cura di usare valori relativi (in genere
@@ -2859,19 +2860,19 @@ riferiti all'indirizzo di partenza del segmento).
 
 L'argomento \param{shmflg} permette di cambiare il comportamento della
 funzione; esso va specificato come maschera binaria, i bit utilizzati sono
-solo due e sono identificati dalle costanti \macro{SHM\_RND} e
-\macro{SHM\_RDONLY}, che vanno combinate con un OR aritmetico.  Specificando
-\macro{SHM\_RND} si evita che \func{shmat} ritorni un errore quando
+solo due e sono identificati dalle costanti \const{SHM\_RND} e
+\const{SHM\_RDONLY}, che vanno combinate con un OR aritmetico.  Specificando
+\const{SHM\_RND} si evita che \func{shmat} ritorni un errore quando
 \param{shmaddr} non è allineato ai confini di una pagina. Si può quindi usare
 un valore qualunque per \param{shmaddr}, e il segmento verrà comunque
-agganciato, ma al più vicino multiplo di \macro{SHMLBA} (il nome della
+agganciato, ma al più vicino multiplo di \const{SHMLBA} (il nome della
 costante sta infatti per \textit{rounded}, e serve per specificare un
-indirizzo come arrotondamento, in Linux è equivalente a \macro{PAGE\_SIZE}).
+indirizzo come arrotondamento, in Linux è equivalente a \const{PAGE\_SIZE}).
 
-L'uso di \macro{SHM\_RDONLY} permette di agganciare il segmento in sola
+L'uso di \const{SHM\_RDONLY} permette di agganciare il segmento in sola
 lettura (si ricordi che anche le pagine di memoria hanno dei permessi), in tal
 caso un tentativo di scrivere sul segmento comporterà una violazione di
-accesso con l'emissione di un segnale di \macro{SIGSEGV}. Il comportamento
+accesso con l'emissione di un segnale di \const{SIGSEGV}. Il comportamento
 usuale di \func{shmat} è quello di agganciare il segmento con l'accesso in
 lettura e scrittura (ed il processo deve aver questi permessi in
 \var{shm\_perm}), non è prevista la possibilità di agganciare un segmento in
@@ -2910,7 +2911,7 @@ dell'interfaccia, \func{shmdt}, il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore, la funzione fallisce solo quando non c'è un segmento agganciato
     all'indirizzo \func{shmaddr}, con \var{errno} che assume il valore
-    \macro{EINVAL}.}
+    \const{EINVAL}.}
 \end{functions}
 
 La funzione sgancia dallo spazio degli indirizzi del processo un segmento di
@@ -2998,8 +2999,8 @@ usa la caratteristica della funzione \func{open} (illustrata in
   standard POSIX.1, ciò non toglie che in alcune implementazioni questa
   tecnica possa non funzionare; in particolare per Linux, nel caso di NFS, si
   è comunque soggetti alla possibilità di una race condition.} che essa
-ritorni un errore quando usata con i flag di \macro{O\_CREAT} e
-\macro{O\_EXCL}. In tal modo la creazione di un \textsl{file di lock} può
+ritorni un errore quando usata con i flag di \const{O\_CREAT} e
+\const{O\_EXCL}. In tal modo la creazione di un \textsl{file di lock} può
 essere eseguita atomicamente, il processo che crea il file con successo si può
 considerare come titolare del lock (e della risorsa ad esso associata) mentre
 il rilascio si può eseguire con una chiamata ad \func{unlink}.
@@ -3182,11 +3183,11 @@ evitare l'uso di una memoria condivisa facendo ricorso al cosiddetto
 
 Abbiamo visto in \secref{sec:file_memory_map} che è possibile mappare il
 contenuto di un file nella memoria di un processo, e che, quando viene usato
-il flag \macro{MAP\_SHARED}, le modifiche effettuate al contenuto del file
+il flag \const{MAP\_SHARED}, le modifiche effettuate al contenuto del file
 vengono viste da tutti i processi che lo hanno mappato. Utilizzare questa
 tecnica per creare una memoria condivisa fra processi diversi è estremamente
 inefficiente, in quanto occorre passare attraverso il disco. Però abbiamo
-visto anche che se si esegue la mappatura con il flag \macro{MAP\_ANONYMOUS}
+visto anche che se si esegue la mappatura con il flag \const{MAP\_ANONYMOUS}
 la regione mappata non viene associata a nessun file, anche se quanto scritto
 rimane in memoria e può essere riletto; allora, dato che un processo figlio
 mantiene nel suo spazio degli indirizzi anche le regioni mappate, esso sarà
index a90c4ed..d708c2e 100644 (file)
@@ -115,8 +115,8 @@ valore dello stato di uscita 
 incorrere nel caso in cui restituendo un codice di errore 256, si otterrebbe
 uno stato di uscita uguale a zero, che verrebbe interpretato come un successo.
 
-In \file{stdlib.h} sono definite, seguendo lo standard POSIX, le due macro
-\macro{EXIT\_SUCCESS} e \macro{EXIT\_FAILURE}, da usare sempre per specificare
+In \file{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. In Linux esse sono poste rispettivamente ai
 valori di tipo \ctyp{int} 0 e 1.
 
@@ -156,7 +156,7 @@ non vengono salvati e le eventuali funzioni registrate con \func{atexit} e
 La funzione chiude tutti i file descriptor appartenenti al processo (si tenga
 presente che questo non comporta il salvataggio dei dati bufferizzati degli
 stream), fa sì che ogni figlio del processo sia ereditato da \cmd{init} (vedi
-\secref{cha:process_handling}), manda un segnale \macro{SIGCHLD} al processo
+\secref{cha:process_handling}), manda un segnale \const{SIGCHLD} al processo
 padre (vedi \secref{sec:sig_job_control}) ed infine ritorna lo stato di uscita
 specificato in \param{status} che può essere raccolto usando la funzione
 \func{wait} (vedi \secref{sec:proc_wait}).
@@ -332,7 +332,7 @@ commette quando si 
 chiamato un \textit{segmentation fault}. Se si tenta cioè di leggere o
 scrivere da un indirizzo per il quale non esiste un'associazione della pagina
 virtuale, il kernel risponde al relativo \textit{page fault}\index{page fault}
-mandando un segnale \macro{SIGSEGV} al processo, che normalmente ne causa la
+mandando un segnale \const{SIGSEGV} al processo, che normalmente ne causa la
 terminazione immediata.
 
 È pertanto importante capire come viene strutturata \textsl{la memoria
@@ -467,20 +467,20 @@ prototipi sono i seguenti:
   
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
   di successo e \val{NULL} in caso di fallimento, nel qual caso
-  \var{errno} assumerà il valore \macro{ENOMEM}.
+  \var{errno} assumerà il valore \const{ENOMEM}.
 \funcdecl{void *malloc(size\_t size)}
   Alloca \var{size} byte nello heap. La memoria non viene inizializzata.
 
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
   di successo e \val{NULL} in caso di fallimento, nel qual caso
-  \var{errno} assumerà il valore \macro{ENOMEM}.
+  \var{errno} assumerà il valore \const{ENOMEM}.
 \funcdecl{void *realloc(void *ptr, size\_t size)}
   Cambia la dimensione del blocco allocato all'indirizzo \var{ptr}
   portandola a \var{size}.
 
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
   di successo e \val{NULL} in caso di fallimento, nel qual caso
-  \var{errno} assumerà il valore \macro{ENOMEM}.
+  \var{errno} assumerà il valore \const{ENOMEM}.
 \funcdecl{void free(void *ptr)}
   Disalloca lo spazio di memoria puntato da \var{ptr}.
 
@@ -543,10 +543,10 @@ operazione.
 Le \acr{glibc} hanno un'implementazione delle routine di allocazione che è
 controllabile dall'utente attraverso alcune variabili di ambiente, in
 particolare diventa possibile tracciare questo tipo di errori usando la
-variabile \macro{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 di chiamate doppie a \func{free}.
-In particolare:
+variabile d'ambiente \val{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 di chiamate doppie a
+\func{free}.  In particolare:
 \begin{itemize}
 \item se la variabile è posta a zero gli errori vengono ignorati.
 \item se è posta ad 1 viene stampato un avviso sullo \textit{standard error}
@@ -627,7 +627,7 @@ stack della funzione corrente. La sintassi 
 
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
   di successo e \val{NULL} in caso di fallimento, nel qual caso
-  \var{errno} assumerà il valore \macro{ENOMEM}.
+  \var{errno} assumerà il valore \const{ENOMEM}.
 \end{prototype}
 \noindent ma in questo caso non è più necessario liberare la memoria (e quindi
 non esiste un analogo della \func{free}) in quanto essa viene rilasciata 
@@ -679,7 +679,7 @@ analoghe system call a cui fanno da interfaccia. I loro prototipi sono:
   \var{end\_data\_segment}.
   
   La funzione restituisce 0 in caso di successo e -1 in caso di
-    fallimento, nel qual caso \var{errno} assumerà il valore \macro{ENOMEM}.
+    fallimento, nel qual caso \var{errno} assumerà il valore \const{ENOMEM}.
 
   \funcdecl{void *sbrk(ptrdiff\_t increment)} Incrementa lo spazio dati di un
   programma di \var{increment}. Un valore zero restituisce l'attuale posizione
@@ -687,7 +687,7 @@ analoghe system call a cui fanno da interfaccia. I loro prototipi sono:
   
   La funzione restituisce il puntatore all'inizio della nuova zona di memoria
   allocata in caso di successo e \val{NULL} in caso di fallimento, nel qual
-  caso \macro{errno} assumerà il valore \macro{ENOMEM}.
+  caso \var{errno} assumerà il valore \const{ENOMEM}.
 \end{functions}
 \noindent in genere si usa \func{sbrk} con un valore zero per ottenere
 l'attuale posizione della fine del segmento dati.
@@ -768,9 +768,9 @@ relative alla propria memoria.
 
 Il sistema pone dei limiti all'ammontare di memoria di un processo che può
 essere bloccata e al totale di memoria fisica che può dedicare a questo, lo
-standard POSIX.1 richiede che sia definita in \file{unistd.h} la costante
+standard POSIX.1 richiede che sia definita in \file{unistd.h} la macro
 \macro{\_POSIX\_MEMLOCK\_RANGE} per indicare la capacità di eseguire il
-\textit{memory locking} e la costante \macro{PAGESIZE} in \file{limits.h} per
+\textit{memory locking} e la costante \const{PAGESIZE} in \file{limits.h} per
 indicare la dimensione di una pagina in byte.
 
 Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
@@ -791,12 +791,12 @@ Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
     caso di errore, nel qual caso \var{errno} assumerà uno dei
     valori seguenti:
   \begin{errlist}
-  \item[\macro{ENOMEM}] alcuni indirizzi dell'intervallo specificato non
+  \item[\errcode{ENOMEM}] alcuni indirizzi dell'intervallo specificato non
     corrispondono allo spazio di indirizzi del processo o si è ecceduto
     il numero massimo consentito di pagine bloccate.
-  \item[\macro{EINVAL}] \var{len} non è un valore positivo.
+  \item[\errcode{EINVAL}] \var{len} non è un valore positivo.
   \end{errlist}
-  e, per \func{mlock}, anche \macro{EPERM} quando il processo non ha i
+  e, per \func{mlock}, anche \const{EPERM} quando il processo non ha i
   privilegi richiesti per l'operazione.}
 \end{functions}
 
@@ -821,9 +821,9 @@ Il parametro \var{flags} di \func{mlockall} permette di controllarne il
 comportamento; esso può essere specificato come l'OR aritmetico delle due
 costanti: 
 \begin{basedescript}{\desclabelwidth{2.5cm}}
-\item[\macro{MCL\_CURRENT}] blocca tutte le pagine correntemente mappate nello
+\item[\const{MCL\_CURRENT}] blocca tutte le pagine correntemente mappate nello
   spazio di indirizzi del processo.
-\item[\macro{MCL\_FUTURE}] blocca tutte le pagine che saranno mappate nello
+\item[\const{MCL\_FUTURE}] blocca tutte le pagine che saranno mappate nello
   spazio di indirizzi del processo.
 \end{basedescript}
 
@@ -1009,7 +1009,7 @@ Normalmente \func{getopt} compie una permutazione degli elementi di \var{argv}
 cosicché alla fine della scansione gli elementi che non sono opzioni sono
 spostati in coda al vettore. Oltre a questa esistono altre due modalità di
 gestire gli elementi di \var{argv}; se \var{optstring} inizia con il carattere
-\texttt{'+'} (o è impostata la variabile di ambiente \macro{POSIXLY\_CORRECT})
+\texttt{'+'} (o è impostata la variabile di ambiente \val{POSIXLY\_CORRECT})
 la scansione viene fermata non appena si incontra un elemento che non è
 un'opzione. L'ultima modalità, usata quando un programma può gestire la
 mescolanza fra opzioni e argomenti, ma se li aspetta in un ordine definito, si
@@ -1096,20 +1096,20 @@ controllare \cmd{man environ}.
     & \textbf{Linux} & \textbf{Descrizione} \\
     \hline
     \hline
-    \macro{USER} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
-    \macro{LOGNAME} & $\bullet$ & $\bullet$ & $\bullet$ & Nome di login\\
-    \macro{HOME} & $\bullet$ & $\bullet$ & $\bullet$ & 
+    \val{USER} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
+    \val{LOGNAME} & $\bullet$ & $\bullet$ & $\bullet$ & Nome di login\\
+    \val{HOME} & $\bullet$ & $\bullet$ & $\bullet$ & 
     Directory base dell'utente\\
-    \macro{LANG} & $\bullet$ & $\bullet$ & $\bullet$ & Localizzazione\\
-    \macro{PATH} & $\bullet$ & $\bullet$ & $\bullet$ & Elenco delle directory
+    \val{LANG} & $\bullet$ & $\bullet$ & $\bullet$ & Localizzazione\\
+    \val{PATH} & $\bullet$ & $\bullet$ & $\bullet$ & Elenco delle directory
     dei programmi\\
-    \macro{PWD} & $\bullet$ & $\bullet$ & $\bullet$ & Directory corrente\\
-    \macro{SHELL} & $\bullet$ & $\bullet$ & $\bullet$ & Shell in uso\\
-    \macro{TERM} & $\bullet$ & $\bullet$ & $\bullet$ & Tipo di terminale\\
-    \macro{PAGER} & $\bullet$ & $\bullet$ & $\bullet$ & Programma per vedere i
+    \val{PWD} & $\bullet$ & $\bullet$ & $\bullet$ & Directory corrente\\
+    \val{SHELL} & $\bullet$ & $\bullet$ & $\bullet$ & Shell in uso\\
+    \val{TERM} & $\bullet$ & $\bullet$ & $\bullet$ & Tipo di terminale\\
+    \val{PAGER} & $\bullet$ & $\bullet$ & $\bullet$ & Programma per vedere i
     testi\\
-    \macro{EDITOR} & $\bullet$ & $\bullet$ & $\bullet$ & Editor preferito\\
-    \macro{BROWSER} & $\bullet$ & $\bullet$ & $\bullet$ & Browser preferito\\
+    \val{EDITOR} & $\bullet$ & $\bullet$ & $\bullet$ & Editor preferito\\
+    \val{BROWSER} & $\bullet$ & $\bullet$ & $\bullet$ & Browser preferito\\
     \hline
   \end{tabular}
   \caption{Variabili di ambiente più comuni definite da vari standard.}
@@ -1174,7 +1174,7 @@ ambiente, i loro prototipi sono i seguenti:
   all'ambiente.
   
   \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 per un
-    errore, che è sempre \macro{ENOMEM}.}
+    errore, che è sempre \const{ENOMEM}.}
 \end{functions}
 \noindent la terza, \func{unsetenv}, serve a cancellare una variabile di
 ambiente; il suo prototipo è:
index 583011a..0277d64 100644 (file)
@@ -150,7 +150,7 @@ interrupt,\footnote{pi
   parte.} (ma può essere anche attivato esplicitamente). Il timer di sistema
 provvede comunque a che esso sia invocato periodicamente, generando un
 interrupt periodico secondo la frequenza specificata dalla costante
-\macro{HZ}, definita in \file{asm/param.h}, ed il cui valore è espresso in
+\const{HZ}, definita in \file{asm/param.h}, ed il cui valore è espresso in
 Hertz.\footnote{Il valore usuale di questa costante è 100, per tutte le
   architetture eccetto l'alpha, per la quale è 1000. Occorre fare attenzione a
   non confondere questo valore con quello dei clock tick (vedi
@@ -236,7 +236,7 @@ un nuovo processo viene creato, fino ad un limite che, essendo il \acr{pid} un
 numero positivo memorizzato in un intero a 16 bit, arriva ad un massimo di
 32768.  Oltre questo valore l'assegnazione riparte dal numero più basso
 disponibile a partire da un minimo di 300,\footnote{questi valori, fino al
-  kernel 2.4.x, sono definiti dalla macro \macro{PID\_MAX} in \file{threads.h}
+  kernel 2.4.x, sono definiti dalla macro \const{PID\_MAX} in \file{threads.h}
   e direttamente in \file{fork.c}, con il kernel 2.5.x e la nuova interfaccia
   per i thread creata da Ingo Molnar anche il meccanismo di allocazione dei
   \acr{pid} è stato modificato.} che serve a riservare i \acr{pid} più bassi
@@ -300,10 +300,10 @@ prototipo della funzione 
     zero al figlio; ritorna -1 al padre (senza creare il figlio) in caso di
     errore; \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EAGAIN}] non ci sono risorse sufficienti per creare un'altro
+  \item[\errcode{EAGAIN}] non ci sono risorse sufficienti per creare un'altro
     processo (per allocare la tabella delle pagine e le strutture del task) o
     si è esaurito il numero di processi disponibili.
-  \item[\macro{ENOMEM}] non è stato possibile allocare la memoria per le
+  \item[\errcode{ENOMEM}] non è stato possibile allocare la memoria per le
     strutture necessarie al kernel per creare il nuovo processo.
   \end{errlist}}
 \end{functions}
@@ -696,7 +696,7 @@ modalit
 chiamare la funzione \func{abort} per invocare una chiusura anomala, o essere
 terminato da un segnale.  In realtà anche la prima modalità si riconduce alla
 seconda, dato che \func{abort} si limita a generare il segnale
-\macro{SIGABRT}.
+\const{SIGABRT}.
 
 Qualunque sia la modalità di conclusione di un processo, il kernel esegue
 comunque una serie di operazioni: chiude tutti i file aperti, rilascia la
@@ -707,15 +707,15 @@ eseguite alla chiusura di un processo 
 \item viene memorizzato lo stato di terminazione del processo.
 \item ad ogni processo figlio viene assegnato un nuovo padre (in genere
   \cmd{init}).
-\item viene inviato il segnale \macro{SIGCHLD} al processo padre (vedi
+\item viene inviato il segnale \const{SIGCHLD} al processo padre (vedi
   \secref{sec:sig_sigchld}).
 \item se il processo è un leader di sessione ed il suo terminale di controllo
-  è quello della sessione viene mandato un segnale di \macro{SIGHUP} a tutti i
+  è quello della sessione viene mandato un segnale di \const{SIGHUP} a tutti i
   processi del gruppo di foreground e il terminale di controllo viene
   disconnesso (vedi \secref{sec:sess_ctrl_term}).
 \item se la conclusione di un processo rende orfano un \textit{process
     group} ciascun membro del gruppo viene bloccato, e poi gli vengono
-  inviati in successione i segnali \macro{SIGHUP} e \macro{SIGCONT}
+  inviati in successione i segnali \const{SIGHUP} e \const{SIGCONT}
   (vedi ancora \secref{sec:sess_ctrl_term}).
 \end{itemize*}
 
@@ -869,7 +869,7 @@ segnale termina il processo o chiama una funzione di gestione.
 \bodydesc{La funzione restituisce il \acr{pid} del figlio in caso di successo
   e -1 in caso di errore; \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
+  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
   \end{errlist}}
 \end{functions}
 \noindent
@@ -903,19 +903,19 @@ funzione, il cui prototipo 
 Attende la conclusione di un processo figlio.
 
 \bodydesc{La funzione restituisce il \acr{pid} del processo che è uscito, 0 se
-  è stata specificata l'opzione \macro{WNOHANG} e il processo non è uscito e
+  è stata specificata l'opzione \const{WNOHANG} e il processo non è uscito e
   -1 per un errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINTR}] se non è stata specificata l'opzione \macro{WNOHANG} e
+  \item[\errcode{EINTR}] se non è stata specificata l'opzione \const{WNOHANG} e
     la funzione è stata interrotta da un segnale.
-  \item[\macro{ECHILD}] il processo specificato da \param{pid} non esiste o
+  \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o
     non è figlio del processo chiamante.
   \end{errlist}}
 \end{functions}
 
 Le differenze principali fra le due funzioni sono che \func{wait} si blocca
 sempre fino a che un processo figlio non termina, mentre \func{waitpid} ha la
-possibilità si specificare un'opzione \macro{WNOHANG} che ne previene il
+possibilità si specificare un'opzione \const{WNOHANG} che ne previene il
 blocco; inoltre \func{waitpid} può specificare quale processo attendere sulla
 base del valore fornito dall'argomento \param{pid}, secondo lo
 specchietto riportato in \tabref{tab:proc_waidpid_pid}:
@@ -930,9 +930,9 @@ specchietto riportato in \tabref{tab:proc_waidpid_pid}:
     $<-1$& -- & attende per un figlio il cui \textit{process group} (vedi
     \secref{sec:sess_proc_group}) è uguale al
     valore assoluto di \var{pid}. \\
-    $-1$ & \macro{WAIT\_ANY} & attende per un figlio qualsiasi, usata in
+    $-1$ & \const{WAIT\_ANY} & attende per un figlio qualsiasi, usata in
     questa maniera è equivalente a \func{wait}.\\ 
-    $0$  & \macro{WAIT\_MYPGRP} & attende per un figlio il cui \textit{process
+    $0$  & \const{WAIT\_MYPGRP} & attende per un figlio il cui \textit{process
     group} è uguale a quello del processo chiamante. \\
     $>0$ & -- &attende per un figlio il cui \acr{pid} è uguale al
     valore di \var{pid}.\\
@@ -945,8 +945,8 @@ specchietto riportato in \tabref{tab:proc_waidpid_pid}:
 
 Il comportamento di \func{waitpid} può inoltre essere modificato passando
 delle opportune opzioni tramite l'argomento \param{option}. I valori possibili
-sono il già citato \macro{WNOHANG}, che previene il blocco della funzione
-quando il processo figlio non è terminato, e \macro{WUNTRACED}. Quest'ultimo
+sono il già citato \const{WNOHANG}, che previene il blocco della funzione
+quando il processo figlio non è terminato, e \const{WUNTRACED}. Quest'ultimo
 viene generalmente usato per il controllo di sessione, (trattato in
 \secref{sec:sess_job_control}) in quanto permette di identificare i processi
 bloccati. La funzione infatti in tal caso ritorna, restituendone il \acr{pid},
@@ -961,7 +961,7 @@ La terminazione di un processo figlio 
 rispetto all'esecuzione di un programma e può avvenire in un qualunque
 momento. Per questo motivo, come accennato nella sezione precedente, una delle
 azioni prese dal kernel alla conclusione di un processo è quella di mandare un
-segnale di \macro{SIGCHLD} al padre. L'azione predefinita (si veda
+segnale di \const{SIGCHLD} al padre. L'azione predefinita (si veda
 \secref{sec:sig_base}) per questo segnale è di essere ignorato, ma la sua
 generazione costituisce il meccanismo di comunicazione asincrona con cui il
 kernel avverte il processo padre che uno dei suoi figli è terminato.
@@ -971,7 +971,7 @@ conclusione di un processo per proseguire, specie se tutto questo serve solo
 per leggerne lo stato di chiusura (ed evitare la presenza di \textit{zombie}),
 per questo la modalità più usata per chiamare queste funzioni è quella di
 utilizzarle all'interno di un \textit{signal handler} (vedremo un esempio di
-come gestire \macro{SIGCHLD} con i segnali in \secref{sec:sig_example}). In
+come gestire \const{SIGCHLD} con i segnali in \secref{sec:sig_example}). In
 questo caso infatti, dato che il segnale è generato dalla terminazione di un
 figlio, avremo la certezza che la chiamata a \func{wait} non si bloccherà.
 
@@ -1090,26 +1090,26 @@ famiglia di funzioni) che possono essere usate per questo compito, in realt
   \bodydesc{La funzione ritorna solo in caso di errore, restituendo -1; nel
     qual caso \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EACCES}] il file non è eseguibile, oppure il filesystem è
+  \item[\errcode{EACCES}] il file non è eseguibile, oppure il filesystem è
     montato in \cmd{noexec}, oppure non è un file regolare o un interprete.
-  \item[\macro{EPERM}] il file ha i bit \acr{suid} o \acr{sgid}, l'utente non
+  \item[\errcode{EPERM}] il file ha i bit \acr{suid} o \acr{sgid}, l'utente non
     è root, e o il processo viene tracciato, o il filesystem è montato con
     l'opzione \cmd{nosuid}.
-  \item[\macro{ENOEXEC}] il file è in un formato non eseguibile o non
+  \item[\errcode{ENOEXEC}] il file è in un formato non eseguibile o non
     riconosciuto come tale, o compilato per un'altra architettura.
-  \item[\macro{ENOENT}] il file o una delle librerie dinamiche o l'interprete
+  \item[\errcode{ENOENT}] il file o una delle librerie dinamiche o l'interprete
     necessari per eseguirlo non esistono.
-  \item[\macro{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più
+  \item[\errcode{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più
     processi. 
-  \item[\macro{EINVAL}] L'eseguibile ELF ha più di un segmento
-    \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un
+  \item[\errcode{EINVAL}] L'eseguibile ELF ha più di un segmento
+    \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
-  \item[\macro{ELIBBAD}] Un interprete ELF non è in un formato
+  \item[\errcode{ELIBBAD}] Un interprete ELF non è in un formato
     riconoscibile.
   \end{errlist}
-  ed inoltre anche \macro{EFAULT}, \macro{ENOMEM}, \macro{EIO},
-  \macro{ENAMETOOLONG}, \macro{E2BIG}, \macro{ELOOP}, \macro{ENOTDIR},
-  \macro{ENFILE}, \macro{EMFILE}.}
+  ed inoltre anche \const{EFAULT}, \const{ENOMEM}, \const{EIO},
+  \const{ENAMETOOLONG}, \const{E2BIG}, \const{ELOOP}, \const{ENOTDIR},
+  \const{ENFILE}, \const{EMFILE}.}
 \end{prototype}
 
 La funzione \func{exec} esegue il file o lo script indicato da
@@ -1199,10 +1199,10 @@ viene eseguita automaticamente una ricerca fra i file presenti nella lista di
 directory specificate dalla variabile di ambiente \var{PATH}. Il file che
 viene posto in esecuzione è il primo che viene trovato. Se si ha un errore
 relativo a permessi di accesso insufficienti (cioè l'esecuzione della
-sottostante \func{execve} ritorna un \macro{EACCESS}), la ricerca viene
+sottostante \func{execve} ritorna un \errcode{EACCESS}), la ricerca viene
 proseguita nelle eventuali ulteriori directory indicate in \var{PATH}; solo se
 non viene trovato nessun altro file viene finalmente restituito
-\macro{EACCESS}.
+\errcode{EACCESS}.
 
 Le altre quattro funzioni si limitano invece a cercare di eseguire il file
 indicato dal parametro \var{path}, che viene interpretato come il
@@ -1218,7 +1218,7 @@ indicato dal parametro \var{path}, che viene interpretato come il
 La terza differenza è come viene passata la lista delle variabili di ambiente.
 Con lo mnemonico \code{e} vengono indicate quelle funzioni che necessitano di
 un vettore di parametri \var{envp[]} analogo a quello usato per gli argomenti
-a riga di comando (terminato quindi da un \macro{NULL}), le altre usano il
+a riga di comando (terminato quindi da un \val{NULL}), le altre usano il
 valore della variabile \var{environ} (vedi \secref{sec:proc_environ}) del
 processo di partenza per costruire l'ambiente.
 
@@ -1249,8 +1249,8 @@ la lista completa 
 Inoltre i segnali che sono stati impostati per essere ignorati nel processo
 chiamante mantengono la stessa impostazione pure nel nuovo programma, tutti
 gli altri segnali vengono impostati alla loro azione predefinita. Un caso
-speciale è il segnale \macro{SIGCHLD} che, quando impostato a
-\macro{SIG\_IGN}, può anche non essere reimpostato a \macro{SIG\_DFL} (si veda
+speciale è il segnale \const{SIGCHLD} che, quando impostato a
+\const{SIG\_IGN}, può anche non essere reimpostato a \const{SIG\_DFL} (si veda
 \secref{sec:sig_gen_beha}).
 
 La gestione dei file aperti dipende dal valore che ha il flag di
@@ -1280,7 +1280,7 @@ Se il file da eseguire 
 condivise, viene lanciato il \textit{linker} dinamico \cmd{ld.so} prima del
 programma per caricare le librerie necessarie ed effettuare il link
 dell'eseguibile. Se il programma è in formato ELF per caricare le librerie
-dinamiche viene usato l'interprete indicato nel segmento \macro{PT\_INTERP},
+dinamiche viene usato l'interprete indicato nel segmento \const{PT\_INTERP},
 in genere questo è \file{/lib/ld-linux.so.1} per programmi linkati con le
 \acr{libc5}, e \file{/lib/ld-linux.so.2} per programmi linkati con le
 \acr{glibc}. Infine nel caso il file sia uno script esso deve iniziare con
@@ -1492,7 +1492,7 @@ corrente.
 corrente.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
-  di fallimento: l'unico errore possibile è \macro{EPERM}.}
+  di fallimento: l'unico errore possibile è \const{EPERM}.}
 \end{functions}
 
 Il funzionamento di queste due funzioni è analogo, per cui considereremo solo
@@ -1507,7 +1507,7 @@ sistema) allora tutti gli identificatori (\textit{real}, \textit{effective} e
 altrimenti viene impostato solo l'\textsl{userid effettivo}, e soltanto se il
 valore specificato corrisponde o all'\textsl{userid reale} o
 all'\textsl{userid salvato}. Negli altri casi viene segnalato un errore (con
-\macro{EPERM}).
+\errcode{EPERM}).
 
 Come accennato l'uso principale di queste funzioni è quello di poter
 consentire ad un programma con i bit \acr{suid} o \acr{sgid} impostati (vedi
@@ -1592,7 +1592,7 @@ specificati da \var{ruid} e \var{euid}.
 specificati da \var{rgid} e \var{egid}.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
-  di fallimento: l'unico errore possibile è \macro{EPERM}.}
+  di fallimento: l'unico errore possibile è \const{EPERM}.}
 \end{functions}
 
 La due funzioni sono analoghe ed il loro comportamento è identico; quanto
@@ -1644,7 +1644,7 @@ corrente a \var{uid}.
 corrente a \var{gid}.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
-  di fallimento: l'unico errore possibile è \macro{EPERM}.}
+  di fallimento: l'unico errore possibile è \const{EPERM}.}
 \end{functions}
 
 Come per le precedenti le due funzioni sono identiche, per cui tratteremo solo
@@ -1675,7 +1675,7 @@ corrente ai valori specificati rispettivamente da \var{rgid}, \var{egid} e
 \var{sgid}.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
-  di fallimento: l'unico errore possibile è \macro{EPERM}.}
+  di fallimento: l'unico errore possibile è \const{EPERM}.}
 \end{functions}
 
 Le due funzioni sono identiche, quanto detto per la prima riguardo gli userid
@@ -1700,7 +1700,7 @@ groupid reale, il groupid effettivo e il groupid salvato del processo
 corrente.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso di
-  fallimento: l'unico errore possibile è \macro{EFAULT} se gli indirizzi delle
+  fallimento: l'unico errore possibile è \const{EFAULT} se gli indirizzi delle
   variabili di ritorno non sono validi.}
 \end{functions}
 
@@ -1747,7 +1747,7 @@ processo corrente a \var{fsuid}.
 processo corrente a \var{fsgid}.
 
 \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso
-  di fallimento: l'unico errore possibile è \macro{EPERM}.}
+  di fallimento: l'unico errore possibile è \const{EPERM}.}
 \end{functions}
 \noindent queste funzioni hanno successo solo se il processo chiamante ha i
 privilegi di amministratore o, per gli altri utenti, se il valore specificato
@@ -1759,7 +1759,7 @@ coincide con uno dei di quelli del gruppo \textit{real}, \textit{effective} o
 \label{sec:proc_setgroups}
 
 Le ultime funzioni che esamineremo sono quelle che permettono di operare sui
-gruppi supplementari. Ogni processo può avere fino a \macro{NGROUPS\_MAX}
+gruppi supplementari. Ogni processo può avere fino a \const{NGROUPS\_MAX}
 gruppi supplementari in aggiunta al gruppo primario, questi vengono ereditati
 dal processo padre e possono essere cambiati con queste funzioni.
 
@@ -1777,8 +1777,8 @@ questa funzione 
     successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà
     i valori: 
     \begin{errlist}
-    \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido.
-    \item[\macro{EINVAL}] il valore di \param{size} è diverso da zero ma
+    \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido.
+    \item[\errcode{EINVAL}] il valore di \param{size} è diverso da zero ma
       minore del numero di gruppi supplementari del processo.
     \end{errlist}}
 \end{functions}
@@ -1818,10 +1818,10 @@ delle due 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     fallimento, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido.
-    \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
-    \item[\macro{EINVAL}] il valore di \param{size} è maggiore del valore
-    massimo (\macro{NGROUPS}, che per Linux è 32).
+    \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido.
+    \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+    \item[\errcode{EINVAL}] il valore di \param{size} è maggiore del valore
+    massimo (\const{NGROUPS}, che per Linux è 32).
     \end{errlist}}
 \end{functions}
 
@@ -1837,7 +1837,7 @@ un utente specifico, si pu
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     fallimento, nel qual caso \var{errno} assumerà gli stessi valori di
-    \func{setgroups} più \macro{ENOMEM} quando non c'è memoria sufficiente per
+    \func{setgroups} più \const{ENOMEM} quando non c'è memoria sufficiente per
     allocare lo spazio per informazioni dei gruppi.}
 \end{functions}
 
@@ -1921,7 +1921,7 @@ fintanto che esso si trova in uno qualunque degli altri stati.
     attesa di un risposta dal sistema (in genere per I/O), e non può essere
     interrotto in nessuna circostanza. \\
     \textbf{Stopped} & \texttt{T} & Il processo è stato fermato con un
-    \macro{SIGSTOP}, o è tracciato.\\
+    \const{SIGSTOP}, o è tracciato.\\
     \textbf{Zombie} & \texttt{Z} & Il processo è terminato ma il suo stato di
     terminazione non è ancora stato letto dal padre. \\
     \hline
@@ -2032,14 +2032,14 @@ solo attraverso la funzione \func{nice}, il cui prototipo 
   \bodydesc{La funzione ritorna zero in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] un processo senza i privilegi di amministratore ha
+  \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
     specificato un valore di \param{inc} negativo.
   \end{errlist}}
 \end{prototype}
 
 L'argomento \param{inc} indica l'incremento del valore di \var{nice}:
-quest'ultimo può assumere valori compresi fra \macro{PRIO\_MIN} e
-\macro{PRIO\_MAX} (che nel caso di Linux sono $-19$ e $20$), ma per
+quest'ultimo può assumere valori compresi fra \const{PRIO\_MIN} e
+\const{PRIO\_MAX} (che nel caso di Linux sono $-19$ e $20$), ma per
 \param{inc} si può specificare un valore qualunque, positivo o negativo, ed il
 sistema provvederà a troncare il risultato nell'intervallo consentito. Valori
 positivi comportano maggiore \textit{cortesia} e cioè una diminuzione della
@@ -2058,9 +2058,9 @@ Restituisce il valore di \var{nice} per l'insieme dei processi specificati.
   \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{ESRCH}] non c'è nessun processo che corrisponda ai valori di
+  \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
   \param{which} e \param{who}.
-  \item[\macro{EINVAL}] il valore di \param{which} non è valido.
+  \item[\errcode{EINVAL}] il valore di \param{which} non è valido.
   \end{errlist}}
 \end{prototype}
 \noindent (in vecchie versioni può essere necessario includere anche
@@ -2081,9 +2081,9 @@ quest'ultimo indica il processo, il gruppo di processi o l'utente correnti.
     \param{which} & \param{who} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{PRIO\_PROCESS} & \type{pid\_t} &  processo  \\
-    \macro{PRIO\_PRGR}    & \type{pid\_t} &  process group  \\
-    \macro{PRIO\_USER}    & \type{uid\_t} &  utente \\
+    \const{PRIO\_PROCESS} & \type{pid\_t} &  processo  \\
+    \const{PRIO\_PRGR}    & \type{pid\_t} &  process group  \\
+    \const{PRIO\_USER}    & \type{uid\_t} &  utente \\
     \hline
   \end{tabular}
   \caption{Legenda del valore dell'argomento \param{which} e del tipo
@@ -2107,12 +2107,12 @@ impostare la priorit
   \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{ESRCH}] non c'è nessun processo che corrisponda ai valori di
+  \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
   \param{which} e \param{who}.
-  \item[\macro{EINVAL}] il valore di \param{which} non è valido.
-  \item[\macro{EPERM}] un processo senza i privilegi di amministratore ha
+  \item[\errcode{EINVAL}] il valore di \param{which} non è valido.
+  \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
     specificato un valore di \param{inc} negativo.
-  \item[\macro{EACCESS}] un processo senza i privilegi di amministratore ha
+  \item[\errcode{EACCESS}] un processo senza i privilegi di amministratore ha
     cercato di modificare la priorità di un processo di un altro utente.
   \end{errlist}}
 \end{prototype}
@@ -2185,12 +2185,12 @@ prototipo 
   \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} può assumere i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] il processo \param{pid} non esiste.
-    \item[\macro{EINVAL}] il valore di \param{policy} non esiste o il relativo
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+    \item[\errcode{EINVAL}] il valore di \param{policy} non esiste o il relativo
       valore di \param{p} non è valido.
-    \item[\macro{EPERM}] il processo non ha i privilegi per attivare la
-      politica richiesta (vale solo per \macro{SCHED\_FIFO} e
-      \macro{SCHED\_RR}).
+    \item[\errcode{EPERM}] il processo non ha i privilegi per attivare la
+      politica richiesta (vale solo per \const{SCHED\_FIFO} e
+      \const{SCHED\_RR}).
   \end{errlist}}
 \end{prototype}
 
@@ -2210,10 +2210,10 @@ la politica di scheduling corrente.
     \textbf{Policy}  & \textbf{Significato} \\
     \hline
     \hline
-    \macro{SCHED\_FIFO} & Scheduling real-time con politica \textit{FIFO} \\
-    \macro{SCHED\_RR}   & Scheduling real-time con politica \textit{Round
+    \const{SCHED\_FIFO} & Scheduling real-time con politica \textit{FIFO} \\
+    \const{SCHED\_RR}   & Scheduling real-time con politica \textit{Round
     Robin} \\
-    \macro{SCHED\_OTHER}& Scheduling ordinario\\
+    \const{SCHED\_OTHER}& Scheduling ordinario\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{policy}  per la funzione
@@ -2261,13 +2261,13 @@ e \func{sched\_get\_priority\_min}, i cui prototipi sono:
   \bodydesc{La funzioni ritornano il valore della priorità in caso di successo
     e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] il valore di \param{policy} è invalido.
+    \item[\errcode{EINVAL}] il valore di \param{policy} è invalido.
   \end{errlist}}
 \end{functions}
 
 
-I processi con politica di scheduling \macro{SCHED\_OTHER} devono specificare
-un valore nullo (altrimenti si avrà un errore \macro{EINVAL}), questo valore
+I processi con politica di scheduling \const{SCHED\_OTHER} devono specificare
+un valore nullo (altrimenti si avrà un errore \errcode{EINVAL}), questo valore
 infatti non ha niente a che vedere con la priorità dinamica determinata dal
 valore di \var{nice}, che deve essere impostato con le funzioni viste in
 precedenza.
@@ -2275,7 +2275,7 @@ precedenza.
 Il kernel mantiene i processi con la stessa priorità assoluta in una lista, ed
 esegue sempre il primo della lista, mentre un nuovo processo che torna in
 stato \textit{runnable} viene sempre inserito in coda alla lista. Se la
-politica scelta è \macro{SCHED\_FIFO} quando il processo viene eseguito viene
+politica scelta è \const{SCHED\_FIFO} quando il processo viene eseguito viene
 automaticamente rimesso in coda alla lista, e la sua esecuzione continua
 fintanto che non viene bloccato da una richiesta di I/O, o non rilascia
 volontariamente la CPU (in tal caso, tornando nello stato \textit{runnable}
@@ -2291,8 +2291,8 @@ La priorit
   \bodydesc{La funzione ritorna la politica di scheduling in caso di successo
     e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] il processo \param{pid} non esiste.
-    \item[\macro{EINVAL}] il valore di \param{pid} è negativo.
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+    \item[\errcode{EINVAL}] il valore di \param{pid} è negativo.
   \end{errlist}}
 \end{prototype}
 
@@ -2318,8 +2318,8 @@ prototipi sono:
   \bodydesc{La funzione ritorna la priorità  in caso di successo
     e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] il processo \param{pid} non esiste.
-    \item[\macro{EINVAL}] il valore di \param{pid} è negativo.
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+    \item[\errcode{EINVAL}] il valore di \param{pid} è negativo.
   \end{errlist}}
 \end{functions}
 
@@ -2328,7 +2328,7 @@ L'uso di \func{sched\_setparam} che 
 \func{sched\_setscheduler} specificando 0 come valore di \param{pid} si opera
 sul processo corrente. La disponibilità di entrambe le funzioni può essere
 verificata controllando la macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è
-definita nell'header \macro{sched.h}.
+definita nell'header \file{sched.h}.
 
 L'ultima funzione che permette di leggere le informazioni relative ai processi
 real-time è \func{sched\_rr\_get\_interval}, che permette di ottenere la
@@ -2341,8 +2341,8 @@ il suo prototipo 
   \bodydesc{La funzione ritorna 0in caso di successo e -1 in caso di errore,
     nel qual caso \var{errno} può assumere i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] il processo \param{pid} non esiste.
-    \item[\macro{ENOSYS}] la system call non è stata implementata.
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+    \item[\errcode{ENOSYS}] la system call non è stata implementata.
   \end{errlist}}
 \end{prototype}
 
index 98a308a..90ecc48 100644 (file)
@@ -103,7 +103,7 @@ Di norma la shell si cura anche di notificare all'utente (di solito prima
 della stampa a video del prompt) lo stato dei vari processi; essa infatti sarà
 in grado, grazie all'uso di \func{waitpid}, di rilevare sia i processi che
 sono terminati, sia i raggruppamenti che sono bloccati (in questo caso usando
-l'opzione \macro{WUNTRACED}, secondo quanto illustrato in
+l'opzione \const{WUNTRACED}, secondo quanto illustrato in
 \secref{sec:proc_wait}).
 
 
@@ -138,7 +138,7 @@ i cui prototipi sono:
   
   \bodydesc{Le funzioni restituiscono il \acr{pgid} del processo,
     \func{getpgrp} ha sempre successo, mentre \func{getpgid} restituisce -1
-    ponendo \var{errno} a \macro{ESRCH} se il processo selezionato non esiste.}
+    ponendo \var{errno} a \const{ESRCH} se il processo selezionato non esiste.}
 \end{functions}
 
 La funzione \func{getpgid} permette di specificare il \acr{pid} del processo
@@ -161,8 +161,8 @@ funzione \func{getsid}, che per
   caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà
   i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] Il processo selezionato non esiste.
-    \item[\macro{EPERM}] In alcune implementazioni viene restituito quando il
+    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
+    \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
       processo selezionato non fa parte della stessa sessione del processo
       corrente.
     \end{errlist}
@@ -205,10 +205,10 @@ cui prototipo 
   \bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
   -1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ESRCH}] Il processo selezionato non esiste.
-    \item[\macro{EPERM}] Il cambiamento non è consentito.
-    \item[\macro{EACCESS}] Il processo ha già eseguito una \func{exec}.
-    \item[\macro{EINVAL}] Il valore di \param{pgid} è negativo.
+    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
+    \item[\errcode{EPERM}] Il cambiamento non è consentito.
+    \item[\errcode{EACCESS}] Il processo ha già eseguito una \func{exec}.
+    \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
     \end{errlist}
  }
 \end{prototype}
@@ -243,7 +243,7 @@ sessione ad un processo 
   \acr{pgid}.
   
   \bodydesc{La funzione ritorna il valore del nuovo \acr{sid}, e -1 in caso di
-    errore, il solo errore possibile è \macro{EPERM}, che si ha quando il
+    errore, il solo errore possibile è \const{EPERM}, che si ha quando il
     \acr{pgid} e \acr{pid} del processo coincidono.}
 \end{prototype}
 
@@ -304,9 +304,9 @@ divenuto un nuovo leader di sessione dovr
   sempre vera.}, un terminale di controllo. In generale questo viene fatto
 automaticamente dal sistema\footnote{a meno di non avere richiesto
   esplicitamente che questo non diventi un terminale di controllo con il flag
-  \macro{O\_NOCTTY} (vedi \secref{sec:file_open}). In questo Linux segue la
+  \const{O\_NOCTTY} (vedi \secref{sec:file_open}). In questo Linux segue la
   semantica di SVr4; BSD invece richiede che il terminale venga allocato
-  esplicitamente con una \func{ioctl} con il comando \macro{TIOCSCTTY}.}
+  esplicitamente con una \func{ioctl} con il comando \const{TIOCSCTTY}.}
 quando viene aperto il primo terminale (cioè uno dei vari file di dispositivo
 \file{/dev/tty*}) che diventa automaticamente il terminale di controllo,
 mentre il processo diventa il \textsl{processo di controllo} di quella
@@ -329,13 +329,13 @@ funzione \func{tcsetpgrp}, il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
+    \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
       controllo del processo chiamante.
-    \item[\macro{ENOSYS}] Il sistema non supporta il job control.
-    \item[\macro{EPERM}] Il \textit{process group} specificato non è nella
+    \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
+    \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
     stessa sessione del processo chiamante.
     \end{errlist}
-    ed inoltre \macro{EBADF} ed \macro{EINVAL}. 
+    ed inoltre \const{EBADF} ed \const{EINVAL}. 
   }
 \end{functions}
 \noindent la funzione può essere eseguita con successo solo da
@@ -345,7 +345,7 @@ Come accennato in \secref{sec:sess_job_control_overview}, tutti i processi (e
 relativi raggruppamenti) che non fanno parte del gruppo di \textit{foreground}
 sono detti in \textit{background}; se uno si essi cerca di accedere al
 terminale di controllo provocherà l'invio da parte del kernel di uno dei due
-segnali \macro{SIGTTIN} o \macro{SIGTTOU} (a seconda che l'accesso sia stato
+segnali \const{SIGTTIN} o \const{SIGTTOU} (a seconda che l'accesso sia stato
 in lettura o scrittura) a tutto il suo \textit{process group}; dato che il
 comportamento di default di questi segnali (si riveda quanto esposto in
 \secref{sec:sig_job_control}) è di fermare il processo, di norma questo
@@ -353,7 +353,7 @@ comporta che tutti i membri del gruppo verranno fermati, ma non si avranno
 condizioni di errore.\footnote{la shell in genere notifica comunque un
   avvertimento, avvertendo la presenza di processi bloccati grazie all'uso di
   \func{waitpid}.} Se però si bloccano o ignorano i due segnali citati, le
-funzioni di lettura e scrittura falliranno con un errore di \macro{EIO}.
+funzioni di lettura e scrittura falliranno con un errore di \errcode{EIO}.
 
 Un processo può controllare qual'è il gruppo di \textit{foreground} associato
 ad un terminale con la funzione \func{tcgetpgrp}, il cui prototipo è:
@@ -366,10 +366,10 @@ ad un terminale con la funzione \func{tcgetpgrp}, il cui prototipo 
     gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
     \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
+    \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
       corrisponde al terminale di controllo del processo chiamante.
     \end{errlist}
-    ed inoltre \macro{EBADF} ed \macro{ENOSYS}. 
+    ed inoltre \const{EBADF} ed \const{ENOSYS}. 
   }
 \end{functions}
 
@@ -387,22 +387,22 @@ decifrare, ma deve poi leggere la password dal terminale.
 Un'altra caratteristica del terminale di controllo usata nel job control è che
 utilizzando su di esso le combinazioni di tasti speciali (\cmd{C-z},
 \cmd{C-c}, \cmd{C-y} e \verb|C-\|) si farà sì che il kernel invii i
-corrispondenti segnali (rispettivamente \macro{SIGTSTP}, \macro{SIGINT},
-\macro{SIGQUIT} e \macro{SIGTERM}, trattati in \secref{sec:sig_job_control}) a
+corrispondenti segnali (rispettivamente \const{SIGTSTP}, \const{SIGINT},
+\const{SIGQUIT} e \const{SIGTERM}, trattati in \secref{sec:sig_job_control}) a
 tutti i processi del raggruppamento di \textit{foreground}; in questo modo la
 shell può gestire il blocco e l'interruzione dei vari comandi.
  
 Per completare la trattazione delle caratteristiche del job control legate al
 terminale di controllo, occorre prendere in considerazione i vari casi legati
 alla terminazione anomala dei processi, che sono di norma gestite attraverso
-il segnale \macro{SIGHUP}. Il nome del segnale deriva da \textit{hungup},
+il segnale \const{SIGHUP}. Il nome del segnale deriva da \textit{hungup},
 termine che viene usato per indicare la condizione in cui il terminale diventa
 inutilizzabile, (letteralmente sarebbe \textsl{impiccagione}). 
 
 Quando si verifica questa condizione, ad esempio se si interrompe la linea, o
 va giù la rete o più semplicemente si chiude forzatamente la finestra di
 terminale su cui si stava lavorando, il kernel provvederà ad inviare il
-segnale di \macro{SIGHUP} al processo di controllo. L'azione preimpostata in
+segnale di \const{SIGHUP} al processo di controllo. L'azione preimpostata in
 questo caso è la terminazione del processo, il problema che si pone è cosa
 accade agli altri processi nella sessione, che non han più un processo di
 controllo che possa gestire l'accesso al terminale, che potrebbe essere
@@ -411,7 +411,7 @@ riutilizzato per qualche altra sessione.
 Lo standard POSIX.1 prevede che quando il processo di controllo termina, che
 ciò avvenga o meno per un \textit{hungup} del terminale (ad esempio si
 potrebbe terminare direttamente la shell con \cmd{kill}) venga inviato un
-segnale di \macro{SIGHUP} ai processi del raggruppamento di foreground. In
+segnale di \const{SIGHUP} ai processi del raggruppamento di foreground. In
 questo modo essi potranno essere avvisati che non esiste più un processo in
 grado di gestire il terminale (di norma tutto ciò comporta la terminazione
 anche di questi ultimi).
@@ -429,8 +429,8 @@ Questa 
 processi nel raggruppamento, o processi fuori della sessione.  Lo standard
 prevede inoltre che se la terminazione di un processo fa sì che un
 raggruppamento di processi diventi orfano e se i suoi membri sono bloccati, ad
-essi vengano inviati in sequenza i segnali di \macro{SIGHUP} e
-\macro{SIGCONT}.
+essi vengano inviati in sequenza i segnali di \const{SIGHUP} e
+\const{SIGCONT}.
 
 La definizione può sembrare complicata, e a prima vista non è chiaro cosa
 tutto ciò abbia a che fare con il problema della terminazione del processo di
@@ -454,8 +454,8 @@ leader di sessione per
 group creati direttamente dal leader di sessione (a meno di non aver spostato
 con \func{setpgid} un processo da un gruppo ad un altro, cosa che di norma non
 viene fatta) i quali riceveranno, nel caso siano bloccati, i due segnali;
-\macro{SIGCONT} ne farà proseguire l'esecuzione, ed essendo stato nel
-frattempo inviato anche \macro{SIGHUP}, se non c'è un gestore per
+\const{SIGCONT} ne farà proseguire l'esecuzione, ed essendo stato nel
+frattempo inviato anche \const{SIGHUP}, se non c'è un gestore per
 quest'ultimo, i processi bloccati verranno automaticamente terminati.
 
 
@@ -570,7 +570,7 @@ controllo per il terminale, a gestire l'esecuzione dei comandi come illustrato
 in \secref{sec:sess_job_control_overview}. 
 
 Dato che il processo padre resta sempre \cmd{init} quest'ultimo potrà
-provvedere, ricevendo un \macro{SIGCHLD} all'uscita della shell quando la
+provvedere, ricevendo un \const{SIGCHLD} all'uscita della shell quando la
 sessione di lavoro è terminata, a rilanciare \cmd{getty} sul terminale per
 ripetere da capo tutto il procedimento. 
 
@@ -622,7 +622,7 @@ occorrer
   però non ha associato nessun terminale di controllo.
 \item Assicurarsi che al processo non venga associato in seguito nessun nuovo
   terminale di controllo; questo può essere fatto sia avendo cura di usare
-  sempre l'opzione \macro{O\_NOCTTY} nell'aprire i file di terminale, che
+  sempre l'opzione \const{O\_NOCTTY} nell'aprire i file di terminale, che
   eseguendo una ulteriore \func{fork} uscendo nel padre e proseguendo nel
   figlio. In questo caso, non essendo più quest'ultimo un leader di sessione
   non potrà ottenere automaticamente un terminale di controllo.
@@ -753,24 +753,24 @@ specificato con un OR aritmetico.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{LOG\_AUTH}     & Messaggi relativi ad autenticazione e sicurezza,
-                            obsoleto, è sostituito da \macro{LOG\_AUTHPRIV}. \\
-    \macro{LOG\_AUTHPRIV} & Sostituisce \macro{LOG\_AUTH}.\\
-    \macro{LOG\_CRON}     & Messaggi dei demoni di gestione dei comandi
+    \const{LOG\_AUTH}     & Messaggi relativi ad autenticazione e sicurezza,
+                            obsoleto, è sostituito da \const{LOG\_AUTHPRIV}. \\
+    \const{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
+    \const{LOG\_CRON}     & Messaggi dei demoni di gestione dei comandi
                             programmati (\cmd{cron} e \cmd{at}).\\
-    \macro{LOG\_DAEMON}   & Demoni di sistema.\\
-    \macro{LOG\_FTP}      & Server FTP.\\
-    \macro{LOG\_KERN}     & Messaggi del kernel\\
-    \macro{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale\\
+    \const{LOG\_DAEMON}   & Demoni di sistema.\\
+    \const{LOG\_FTP}      & Server FTP.\\
+    \const{LOG\_KERN}     & Messaggi del kernel\\
+    \const{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale\\
     --- & \\
-    \macro{LOG\_LOCAL7}   & Riservato all'amministratore per uso locale\\
-    \macro{LOG\_LPR}      & Messaggi del sistema di gestione delle stampanti \\
-    \macro{LOG\_MAIL}     & Messaggi del sistema di posta elettronica\\
-    \macro{LOG\_NEWS}     & Messaggi del sistema di gestione delle news 
+    \const{LOG\_LOCAL7}   & Riservato all'amministratore per uso locale\\
+    \const{LOG\_LPR}      & Messaggi del sistema di gestione delle stampanti \\
+    \const{LOG\_MAIL}     & Messaggi del sistema di posta elettronica\\
+    \const{LOG\_NEWS}     & Messaggi del sistema di gestione delle news 
                             (USENET) \\
-    \macro{LOG\_SYSLOG}   & Messaggi generati dallo stesso \cmd{syslogd}\\
-    \macro{LOG\_USER}     & Messaggi generici a livello utente\\
-    \macro{LOG\_UUCP}     & Messaggi del sistema UUCP\\
+    \const{LOG\_SYSLOG}   & Messaggi generati dallo stesso \cmd{syslogd}\\
+    \const{LOG\_USER}     & Messaggi generici a livello utente\\
+    \const{LOG\_UUCP}     & Messaggi del sistema UUCP\\
 \hline
 \end{tabular}
 \caption{Valori possibili per l'argomento \param{facility} di \func{openlog}.}
@@ -791,13 +791,13 @@ con un OR aritmetico di una qualunque delle costanti riportate in
 \textbf{Valore}& \textbf{Significato}\\
 \hline
 \hline
-\macro{LOG\_CONS}   & Scrive sulla console quando. \\
-\macro{LOG\_NDELAY} & Sostituisce \macro{LOG\_AUTH}.\\
-\macro{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi
+\const{LOG\_CONS}   & Scrive sulla console quando. \\
+\const{LOG\_NDELAY} & Sostituisce \const{LOG\_AUTH}.\\
+\const{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi
                       programmati (\cmd{cron} e \cmd{at}).\\
-\macro{LOG\_ODELAY} & .\\
-\macro{LOG\_PERROR} & Stampa anche su \file{stderr}.\\
-\macro{LOG\_PID}    & Inserisce nei messaggi il \acr{pid} del processo
+\const{LOG\_ODELAY} & .\\
+\const{LOG\_PERROR} & Stampa anche su \file{stderr}.\\
+\const{LOG\_PID}    & Inserisce nei messaggi il \acr{pid} del processo
                       chiamante. \\
 \hline
 \end{tabular}
@@ -847,15 +847,15 @@ con la maschera binaria delle costanti di \tabref{tab:sess_syslog_facility}.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{LOG\_EMERG}   & Il sistema è inutilizzabile. \\
-    \macro{LOG\_ALERT}   & C'è una emergenza che richiede intervento
+    \const{LOG\_EMERG}   & Il sistema è inutilizzabile. \\
+    \const{LOG\_ALERT}   & C'è una emergenza che richiede intervento
                            immediato.\\
-    \macro{LOG\_CRIT}    & Si è in una condizione critica.\\
-    \macro{LOG\_ERR}     & Si è in una condizione di errore.\\
-    \macro{LOG\_WARNING} & Messaggio di avvertimento.\\
-    \macro{LOG\_NOTICE}  & Notizia significativa relativa al comportamento.\\
-    \macro{LOG\_INFO}    & Messaggio informativo. \\
-    \macro{LOG\_DEBUG}   & Messaggio di debug.\\
+    \const{LOG\_CRIT}    & Si è in una condizione critica.\\
+    \const{LOG\_ERR}     & Si è in una condizione di errore.\\
+    \const{LOG\_WARNING} & Messaggio di avvertimento.\\
+    \const{LOG\_NOTICE}  & Notizia significativa relativa al comportamento.\\
+    \const{LOG\_INFO}    & Messaggio informativo. \\
+    \const{LOG\_DEBUG}   & Messaggio di debug.\\
     \hline
   \end{tabular}
   \caption{Valori possibili per l'indice di importanza del messaggio da
@@ -969,7 +969,7 @@ kernel.
 
 La coda di ingresso mantiene i caratteri che sono stati letti dal terminale ma
 non ancora letti da un processo, la sua dimensione è definita dal parametro di
-sistema \macro{MAX\_INPUT} (si veda \secref{sec:sys_file_limits}), che ne
+sistema \const{MAX\_INPUT} (si veda \secref{sec:sys_file_limits}), che ne
 specifica il limite minimo, in realtà la coda può essere più grande e cambiare
 dimensione dinamicamente. Se è stato abilitato il controllo di flusso in
 ingresso il driver emette i caratteri di STOP e START per bloccare e sbloccare
@@ -978,7 +978,7 @@ massime vengono persi; in alcuni casi il driver provvede ad inviare
 automaticamente un avviso (un carattere di BELL, che provoca un beep)
 sull'output quando si eccedono le dimensioni della coda.  Se è abilitato il
 modo canonico i caratteri in ingresso restano nella coda fintanto che non
-viene ricevuto un a capo; un'altra parametro del sistema, \macro{MAX\_CANON},
+viene ricevuto un a capo; un'altra parametro del sistema, \const{MAX\_CANON},
 specifica la dimensione massima di una riga in modo canonico.
 
 La coda di uscita è analoga a quella di ingresso e contiene i caratteri
@@ -1002,7 +1002,7 @@ System V in una unica interfaccia, che 
 Alcune di queste funzioni prendono come argomento un file descriptor (in
 origine molte operazioni venivano effettuate con \func{ioctl}), ma ovviamente
 possono essere usate solo con file che corrispondano effettivamente ad un
-terminale (altrimenti si otterrà un errore di \macro{ENOTTY}); questo può
+terminale (altrimenti si otterrà un errore di \errcode{ENOTTY}); questo può
 essere evitato utilizzando la funzione \func{isatty}, il cui prototipo è:
 \begin{prototype}{unistd.h}{int isatty(int desc)}
   
@@ -1020,7 +1020,7 @@ descriptor; il suo prototipo 
   Restituisce il nome del terminale associato al file \param{desc}.
   
    \bodydesc{La funzione restituisce il puntatore alla stringa contenente il
-    nome del terminale associato \param{desc} e \macro{NULL} in caso di
+    nome del terminale associato \param{desc} e \val{NULL} in caso di
     errore.}
 \end{prototype}
 
@@ -1040,7 +1040,7 @@ La funzione scrive il pathname del terminale di controllo del processo
 chiamante nella stringa posta all'indirizzo specificato dall'argomento
 \param{s}.  La memoria per contenere la stringa deve essere stata allocata in
 precedenza ed essere lunga almeno
-\macro{L\_ctermid}\footnote{\macro{L\_ctermid} è una delle varie costanti del
+\const{L\_ctermid}\footnote{\const{L\_ctermid} è una delle varie costanti del
   sistema, non trattata esplicitamente in \secref{sec:sys_characteristics} che
   indica la dimensione che deve avere una stringa per poter contenere il nome
   di un terminale.} caratteri. 
@@ -1055,10 +1055,10 @@ statica; il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{ERANGE}] la lunghezza del buffer, \param{len}, non è
+    \item[\errcode{ERANGE}] la lunghezza del buffer, \param{len}, non è
       sufficiente per contenere la stringa restituita.
     \end{errlist}
-    ed inoltre \macro{EBADF} ed \macro{ENOSYS}.
+    ed inoltre \const{EBADF} ed \const{ENOSYS}.
 }
 \end{prototype}
 
@@ -1068,7 +1068,7 @@ ovviamente essere stata allocata in precedenza), e la relativa dimensione,
 \param{len}; se la stringa che deve essere restituita eccede questa dimensione
 si avrà una condizione di errore.
 
-Se si passa come argomento \macro{NULL} la funzione restituisce il puntatore
+Se si passa come argomento \val{NULL} la funzione restituisce il puntatore
 ad una stringa statica che può essere sovrascritta da chiamate successive. Si
 tenga presente che il pathname restituito potrebbe non identificare
 univocamente il terminale (ad esempio potrebbe essere \file{/dev/tty}),
@@ -1122,68 +1122,68 @@ modificare i bit su cui non si interviene.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{INPCK}  & Abilita il controllo di parità in ingresso. Se non viene
+    \const{INPCK}  & Abilita il controllo di parità in ingresso. Se non viene
                      impostato non viene fatto nessun controllo ed i caratteri
                      vengono passati in input direttamente.\\
-    \macro{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
+    \const{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
                      come ricevuto. Ha senso solo se si è impostato 
-                     \macro{INPCK}.\\
-    \macro{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha 
-                     senso solo se \macro{INPCK} è impostato e \macro{IGNPAR}
+                     \const{INPCK}.\\
+    \const{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha 
+                     senso solo se \const{INPCK} è impostato e \const{IGNPAR}
                      no. Se impostato inserisce una sequenza \texttt{0xFF
                        0x00} prima di ogni carattere che presenta errori di
                      parità, se non impostato un carattere con errori di
                      parità viene letto come uno \texttt{0x00}. Se un
-                     carattere ha il valore \texttt{0xFF} e \macro{ISTRIP} 
+                     carattere ha il valore \texttt{0xFF} e \const{ISTRIP} 
                      non è settato, per evitare ambiguità esso viene sempre
                      riportato come \texttt{0xFF 0xFF}.\\
-    \macro{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
+    \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
                      bit mettendo a zero il bit più significativo, altrimenti 
                      vengono passati tutti gli otto bit.\\
-    \macro{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
+    \const{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
                      \textit{condizione di BREAK} è definita nel contesto di
                      una trasmissione seriale asincrona come una sequenza di
                      bit nulli più lunga di un byte. \\
-    \macro{BRKINT} & Controlla la reazione ad un BREAK quando
-                     \macro{IGNBRK} non è impostato. Se \macro{BRKINT} è
+    \const{BRKINT} & Controlla la reazione ad un BREAK quando
+                     \const{IGNBRK} non è impostato. Se \const{BRKINT} è
                      impostato il BREAK causa lo scarico delle code, 
                      e se il terminale è il terminale di controllo per un 
-                     gruppo in foreground anche l'invio di \macro{SIGINT} ai
-                     processi di quest'ultimo. Se invece \macro{BRKINT} non è
+                     gruppo in foreground anche l'invio di \const{SIGINT} ai
+                     processi di quest'ultimo. Se invece \const{BRKINT} non è
                      impostato un BREAK viene letto come un carattere
-                     NUL, a meno che non sia settato \macro{PARMRK}
+                     NUL, a meno che non sia settato \const{PARMRK}
                      nel qual caso viene letto come la sequenza di caratteri
                      \texttt{0xFF 0x00 0x00}.\\
-    \macro{IGNCR}  & Se impostato il carattere di ritorno carrello 
+    \const{IGNCR}  & Se impostato il carattere di ritorno carrello 
                      (\textit{carriage return}, \verb|'\r'|) viene scartato 
                      dall'input. Può essere utile per i terminali che inviano 
                      entrambi i caratteri di ritorno carrello e a capo 
                      (\textit{newline}, \verb|'\n'|).  \\
-    \macro{ICRNL}  & Se impostato un carattere di ritorno carrello  
+    \const{ICRNL}  & Se impostato un carattere di ritorno carrello  
                      (\verb|'\r'|) sul terminale viene automaticamente 
                      trasformato in un a capo (\verb|'\n'|) sulla coda di
                      input. \\
-    \macro{INLCR}  & Se impostato il carattere di a capo
+    \const{INLCR}  & Se impostato il carattere di a capo
                      (\verb|'\n'|) viene automaticamente trasformato in un
                      ritorno carrello (\verb|'\r'|).\\
-    \macro{IUCLC}  & Se impostato trasforma i caratteri maiuscoli dal
+    \const{IUCLC}  & Se impostato trasforma i caratteri maiuscoli dal
                      terminale in minuscoli sull'ingresso (opzione non 
                      POSIX).\\
-    \macro{IXON}   & Se impostato attiva il controllo di flusso in uscita con i
+    \const{IXON}   & Se impostato attiva il controllo di flusso in uscita con i
                      caratteri di START e STOP. se si riceve
                      uno STOP l'output viene bloccato, e viene fatto
                      ripartire solo da uno START, e questi due
                      caratteri non vengono passati alla coda di input. Se non
                      impostato i due caratteri sono passati alla coda di input
                      insieme agli altri.\\
-    \macro{IXANY}  & Se impostato con il controllo di flusso permette a
+    \const{IXANY}  & Se impostato con il controllo di flusso permette a
                      qualunque carattere di far ripartire l'output bloccato da
                      un carattere di STOP.\\
-    \macro{IXOFF}  & Se impostato abilita il controllo di flusso in
+    \const{IXOFF}  & Se impostato abilita il controllo di flusso in
                      ingresso. Il computer emette un carattere di STOP per
                      bloccare l'input dal terminale e lo sblocca con il
                      carattere START. \\
-    \macro{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
+    \const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
                      di ingresso; in Linux non è implementato e il kernel si
                      comporta cose se fosse sempre settato (è una estensione
                      BSD). \\
@@ -1215,45 +1215,45 @@ pseudo-terminali usati nelle connessioni di rete.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
+    \const{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
                     (in maniera dipendente dall'implementazione) per la 
                     visualizzazione sul terminale, ad esempio al
                     carattere di a capo (NL) può venire aggiunto un ritorno
                     carrello (CR).\\
-    \macro{OCRNL} & Se impostato converte automaticamente il carattere di a
+    \const{OCRNL} & Se impostato converte automaticamente il carattere di a
                     capo (NL) nella coppia di caratteri ritorno carrello, a 
                     capo (CR-NL).\\
-    \macro{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso 
+    \const{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso 
                     in caratteri maiuscoli sull'uscita (non previsto da
                     POSIX.1).\\
-    \macro{ONLCR} & Se impostato converte automaticamente il carattere di a 
+    \const{ONLCR} & Se impostato converte automaticamente il carattere di a 
                     capo (NL) in un carattere di ritorno carrello (CR).\\
-    \macro{ONOCR} & Se impostato converte il carattere di ritorno carrello
+    \const{ONOCR} & Se impostato converte il carattere di ritorno carrello
                     (CR) nella coppia di caratteri CR-NL.\\
-    \macro{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
+    \const{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
                     carrello (CR).\\
-    \macro{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
+    \const{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
                     caratteri di riempimento invece di attendere.\\
-    \macro{OFDEL} & Se impostato il carattere di riempimento è DEL
+    \const{OFDEL} & Se impostato il carattere di riempimento è DEL
                     (\texttt{0x3F}), invece che NUL (\texttt{0x00}).\\
-    \macro{NLDLY} & Maschera per i bit che indicano il ritardo per il
+    \const{NLDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di a capo (NL), i valori possibili sono 
-                    \macro{NL0} o \macro{NL1}.\\
-    \macro{CRDLY} & Maschera per i bit che indicano il ritardo per il
+                    \const{NL0} o \const{NL1}.\\
+    \const{CRDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere ritorno carrello (CR), i valori possibili sono
-                    \macro{CR0}, \macro{CR1}, \macro{CR2} o \macro{CR3}.\\
-    \macro{TABDLY}& Maschera per i bit che indicano il ritardo per il
+                    \const{CR0}, \const{CR1}, \const{CR2} o \const{CR3}.\\
+    \const{TABDLY}& Maschera per i bit che indicano il ritardo per il
                     carattere di tabulazione, i valori possibili sono
-                    \macro{TAB0}, \macro{TAB1}, \macro{TAB2} o \macro{TAB3}.\\
-    \macro{BSDLY} & Maschera per i bit che indicano il ritardo per il
+                    \const{TAB0}, \const{TAB1}, \const{TAB2} o \const{TAB3}.\\
+    \const{BSDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di ritorno indietro (\textit{backspace}), i
-                    valori possibili sono \macro{BS0} o \macro{BS1}.\\
-    \macro{VTDLY} & Maschera per i bit che indicano il ritardo per il
+                    valori possibili sono \const{BS0} o \const{BS1}.\\
+    \const{VTDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di tabulazione verticale, i valori possibili sono
-                    \macro{VT0} o \macro{VT1}.\\
-    \macro{FFDLY} & Maschera per i bit che indicano il ritardo per il
+                    \const{VT0} o \const{VT1}.\\
+    \const{FFDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di pagina nuova (\textit{form feed}), i valori
-                    possibili sono \macro{FF0} o \macro{FF1}.\\
+                    possibili sono \const{FF0} o \const{FF1}.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative dei vari bit del flag di controllo
@@ -1298,51 +1298,51 @@ valore.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{CLOCAL} & Se impostato indica che il terminale è connesso in locale
+    \const{CLOCAL} & Se impostato indica che il terminale è connesso in locale
                      e che le linee di controllo del modem devono essere
                      ignorate. Se non impostato effettuando una chiamata ad
                      \func{open} senza aver specificato il flag di
-                     \macro{O\_NOBLOCK} si bloccherà il processo finché 
+                     \const{O\_NOBLOCK} si bloccherà il processo finché 
                      non si è stabilita una connessione con il modem; inoltre 
                      se viene rilevata una disconessione viene inviato un
-                     \macro{SIGHUP} al processo di controllo del terminale. La
+                     \const{SIGHUP} al processo di controllo del terminale. La
                      lettura su un terminale sconnesso comporta una condizione
                      di \textit{end of file} e la scrittura un errore di
-                     \macro{EIO}. \\
-    \macro{HUPCL}  & Se è impostato viene distaccata la connessione del
+                     \errcode{EIO}. \\
+    \const{HUPCL}  & Se è impostato viene distaccata la connessione del
                      modem quando l'ultimo dei processi che ha ancora un file
                      aperto sul terminale lo chiude o esce.\\
-    \macro{CREAD}  & Se è impostato si può leggere l'input del terminale,
+    \const{CREAD}  & Se è impostato si può leggere l'input del terminale,
                      altrimenti i caratteri in ingresso vengono scartati
                      quando arrivano.\\
-    \macro{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
+    \const{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
                      seriale, se non impostato ne viene usato soltanto uno.\\
-    \macro{PARENB} & Se impostato abilita la generazione il controllo di
+    \const{PARENB} & Se impostato abilita la generazione il controllo di
                      parità. La reazione in caso di errori dipende dai
                      relativi valori per \var{c\_iflag}, riportati in 
                      \tabref{tab:sess_termios_iflag}. Se non è impostato i bit
                      di parità non vengono
                      generati e i caratteri non vengono controllati.\\
-    \macro{PARODD} & Ha senso solo se è attivo anche \macro{PARENB}. Se 
+    \const{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se 
                      impostato viene usata una parità è dispari, altrimenti 
                      viene usata una parità pari.\\
-    \macro{CSIZE}  & Maschera per i bit usati per specificare la dimensione 
+    \const{CSIZE}  & Maschera per i bit usati per specificare la dimensione 
                      del carattere inviato lungo la linea di trasmissione, i
                      valore ne indica la lunghezza (in bit), ed i valori   
-                     possibili sono \macro{CS5}, \macro{CS6}, 
-                     \macro{CS7} e \macro{CS8}
+                     possibili sono \const{CS5}, \const{CS6}, 
+                     \const{CS7} e \const{CS8}
                      corrispondenti ad un analogo numero di bit.\\
-    \macro{CBAUD}  & Maschera dei bit (4+1) usati per impostare della velocità
+    \const{CBAUD}  & Maschera dei bit (4+1) usati per impostare della velocità
                      della linea (il \textit{baud rate}) in ingresso. 
                      In Linux non è implementato in quanto viene 
                      usato un apposito campo di \var{termios}.\\
-    \macro{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
+    \const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
                      linea, per le stesse motivazioni del precedente non è
                      implementato in Linux.\\
-    \macro{CIBAUD} & Maschera dei bit della velocità della linea in
-                     ingresso. Analogo a \macro{CBAUD}, anch'esso in Linux è
+    \const{CIBAUD} & Maschera dei bit della velocità della linea in
+                     ingresso. Analogo a \const{CBAUD}, anch'esso in Linux è
                      mantenuto in un apposito campo di \var{termios}. \\
-    \macro{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
+    \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
                      attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
     \hline
   \end{tabular}
@@ -1380,65 +1380,65 @@ seriali all'interno dei flag; come accennato in Linux questo viene fatto
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{ICANON} & Se impostato il terminale opera in modo canonico,
+    \const{ICANON} & Se impostato il terminale opera in modo canonico,
                      altrimenti opera in modo non canonico.\\
-    \macro{ECHO}   & Se è impostato viene attivato l'eco dei caratteri in
+    \const{ECHO}   & Se è impostato viene attivato l'eco dei caratteri in
                      input sull'output del terminale.\\
-    \macro{ECHOE}  & Se è impostato l'eco mostra la cancellazione di un
+    \const{ECHOE}  & Se è impostato l'eco mostra la cancellazione di un
                      carattere in input (in reazione al carattere ERASE)
                      cancellando l'ultimo carattere della riga corrente dallo
                      schermo; altrimenti il carattere è rimandato in eco per
                      mostrare quanto accaduto (usato per i terminali con
                      l'uscita su una stampante). \\
-    \macro{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
+    \const{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
                      cancellazione in una modalità adatta ai terminali con
                      l'uscita su stampante; l'invio del carattere di ERASE
                      comporta la stampa di un \verb|\| seguito dal carattere
                      cancellato, e così via in caso di successive
                      cancellazioni, quando si riprende ad immettere carattere 
                      normali prima verrà stampata una \texttt{/}.\\
-    \macro{ECHOK}  & Se impostato abilita il trattamento della visualizzazione
+    \const{ECHOK}  & Se impostato abilita il trattamento della visualizzazione
                      del carattere KILL, andando a capo dopo aver visualizzato
                      lo stesso, altrimenti viene solo mostrato il carattere e
                      sta all'utente ricordare che l'input precedente è stato
                      cancellato. \\
-    \macro{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
+    \const{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
                      del carattere KILL cancellando i caratteri precedenti
                      nella linea secondo le modalità specificate dai valori di
-                     \macro{ECHOE} e \macro{ECHOPRT}.\\
-    \macro{ECHONL} & Se impostato viene effettuato l'eco di un a
+                     \const{ECHOE} e \const{ECHOPRT}.\\
+    \const{ECHONL} & Se impostato viene effettuato l'eco di un a
                      capo (\verb|\n|) anche se non è stato impostato
-                     \macro{ECHO}. \\
-    \macro{ECHOCTL}& Se impostato insieme ad \macro{ECHO} i caratteri di
+                     \const{ECHO}. \\
+    \const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
                      controllo ASCII (tranne TAB, NL, START, e STOP) sono
                      mostrati nella forma che prepende un \verb|^| alla
                      lettera ottenuta sommando \texttt{0x40} al valore del
                      carattere (di solito questi si possono ottenere anche
                      direttamente premendo il tasto \texttt{ctrl} più la
                      relativa lettera).\\
-    \macro{ISIG}   & Se impostato abilita il riconoscimento dei caratteri
+    \const{ISIG}   & Se impostato abilita il riconoscimento dei caratteri
                      INTR, QUIT, e SUSP generando il relativo segnale.\\
-    \macro{IEXTEN} & Abilita alcune estensioni previste dalla
+    \const{IEXTEN} & Abilita alcune estensioni previste dalla
                      implementazione. Deve essere impostato perché caratteri
                      speciali come EOL2, LNEXT, REPRINT e WERASE possano
                      essere interpretati. \\
-    \macro{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
-                     e uscita quando vengono emessi i segnali \macro{SIGINT}, 
-                     \macro{SIGQUIT} and \macro{SIGSUSP}.\\
-    \macro{TOSTOP} & Se abilitato, con il supporto per il job control presente,
-                     genera il segnale \macro{SIGTTOU} per un processo in
+    \const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
+                     e uscita quando vengono emessi i segnali \const{SIGINT}, 
+                     \const{SIGQUIT} and \const{SIGSUSP}.\\
+    \const{TOSTOP} & Se abilitato, con il supporto per il job control presente,
+                     genera il segnale \const{SIGTTOU} per un processo in
                      background che cerca di scrivere sul terminale.\\
-    \macro{XCASE}  & Se settato il terminale funziona solo con le
+    \const{XCASE}  & Se settato il terminale funziona solo con le
                      maiuscole. L'input è convertito in minuscole tranne per i
                      caratteri preceduti da una \verb|\|. In output le
                      maiuscole sono precedute da una \verb|\| e le minuscole
                      convertite in maiuscole.\\
-    \macro{DEFECHO}& Se impostate effettua l'eco solo se c'è un processo in
+    \const{DEFECHO}& Se impostate effettua l'eco solo se c'è un processo in
                      lettura.\\
-    \macro{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
+    \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
                      attivato dal carattere DISCARD. Non è supportato in
                      Linux.\\
-    \macro{PENDIN} & Indica che la linea deve essere ristampata, viene
+    \const{PENDIN} & Indica che la linea deve essere ristampata, viene
                      attivato dal carattere REPRINT e resta attivo fino alla
                      fine della ristampa. Non è supportato in Linux.\\
     \hline
@@ -1459,16 +1459,16 @@ questo che si impostano le caratteristiche generiche comuni a tutti i
 terminali.
 
 Si tenga presente che i flag che riguardano le modalità di eco dei caratteri
-(\macro{ECHOE}, \macro{ECHOPRT}, \macro{ECHOK}, \macro{ECHOKE},
-\macro{ECHONL}) controllano solo il comportamento della visualizzazione, il
+(\const{ECHOE}, \const{ECHOPRT}, \const{ECHOK}, \const{ECHOKE},
+\const{ECHONL}) controllano solo il comportamento della visualizzazione, il
 riconoscimento dei vari caratteri dipende dalla modalità di operazione, ed
 avviene solo in modo canonico, pertanto questi flag non hanno significato se
-non è impostato \macro{ICANON}.
+non è impostato \const{ICANON}.
 
 Oltre ai vari flag per gestire le varie caratteristiche dei terminali,
 \var{termios} contiene pure il campo \var{c\_cc} che viene usato per impostare
 i caratteri speciali associati alle varie funzioni di controllo. Il numero di
-questi caratteri speciali è indicato dalla costante \macro{NCCS}, POSIX ne
+questi caratteri speciali è indicato dalla costante \const{NCCS}, POSIX ne
 specifica almeno 11, ma molte implementazioni ne definiscono molti
 altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri
   effettivamente definiti sono solo 17.}
@@ -1481,18 +1481,18 @@ altri.\footnote{in Linux il valore della costante 
     \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\
     \hline
     \hline
-    \macro{VINTR}   &\texttt{0x03}&(\verb|C-c|)& Carattere di interrupt, 
+    \const{VINTR}   &\texttt{0x03}&(\verb|C-c|)& Carattere di interrupt, 
                                                  provoca l'emissione di 
-                                                 \macro{SIGINT}. \\
-    \macro{VQUIT}   &\texttt{0x1C}&(\verb|C-\|)& Carattere di uscita provoca 
+                                                 \const{SIGINT}. \\
+    \const{VQUIT}   &\texttt{0x1C}&(\verb|C-\|)& Carattere di uscita provoca 
                                                  l'emissione di 
-                                                 \macro{SIGQUIT}.\\
-    \macro{VERASE}  &\texttt{0x7f}& DEL &  Carattere di ERASE, cancella
+                                                 \const{SIGQUIT}.\\
+    \const{VERASE}  &\texttt{0x7f}& DEL &  Carattere di ERASE, cancella
                                            l'ultimo carattere precedente 
                                            nella linea.\\
-    \macro{VKILL}   &\texttt{0x15}&(\verb|C-u|)& Carattere di KILL, cancella
+    \const{VKILL}   &\texttt{0x15}&(\verb|C-u|)& Carattere di KILL, cancella
                                                  l'intera riga.\\
-    \macro{VEOF}    &\texttt{0x04}&(\verb|C-d|)& Carattere di
+    \const{VEOF}    &\texttt{0x04}&(\verb|C-d|)& Carattere di
                                                  \textit{end-of-file}. Causa
                                                  l'invio del contenuto del
                                                  buffer di ingresso al
@@ -1504,37 +1504,37 @@ altri.\footnote{in Linux il valore della costante 
                                                  zero caratteri, cioè la
                                                  condizione di
                                                  \textit{end-of-file}.\\
-    \macro{VTIME}   &   ---       & --- & Timeout, in decimi di secondo, per
+    \const{VTIME}   &   ---       & --- & Timeout, in decimi di secondo, per
                                           una lettura in modo non canonico. \\
-    \macro{VMIN}    &   ---       & --- & Numero minimo di caratteri per una 
+    \const{VMIN}    &   ---       & --- & Numero minimo di caratteri per una 
                                           lettura in modo non canonico.\\
-    \macro{VSWTC}   &\texttt{0x00}& NUL & Carattere di switch. Non supportato
+    \const{VSWTC}   &\texttt{0x00}& NUL & Carattere di switch. Non supportato
                                           in Linux.\\
-    \macro{VSTART}  &\texttt{0x21}&(\verb|C-q|)& Carattere di START. Riavvia un
+    \const{VSTART}  &\texttt{0x21}&(\verb|C-q|)& Carattere di START. Riavvia un
                                                  output bloccato da uno STOP.\\
-    \macro{VSTOP}   &\texttt{0x23}&(\verb|C-s|)& Carattere di STOP. Blocca
+    \const{VSTOP}   &\texttt{0x23}&(\verb|C-s|)& Carattere di STOP. Blocca
                                                  l'output fintanto che non
                                                  viene premuto un carattere di
                                                  START.\\
-    \macro{VSUSP}   &\texttt{0x1A}&(\verb|C-z|)& Carattere di
+    \const{VSUSP}   &\texttt{0x1A}&(\verb|C-z|)& Carattere di
                                                  sospensione. Invia il segnale
-                                                 \macro{SIGTSTP}.\\
-    \macro{VEOL}    &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come
+                                                 \const{SIGTSTP}.\\
+    \const{VEOL}    &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come
                                           un a capo, ma non viene scartato ed
                                           è letto come l'ultimo carattere
                                           nella riga.  \\
-    \macro{VREPRINT}&\texttt{0x12}&(\verb|C-r|)& Ristampa i caratteri non
+    \const{VREPRINT}&\texttt{0x12}&(\verb|C-r|)& Ristampa i caratteri non
                                                  ancora letti.  \\
-    \macro{VDISCARD}&\texttt{0x07}&(\verb|C-o|)& Non riconosciuto in Linux. \\
-    \macro{VWERASE} &\texttt{0x17}&(\verb|C-w|)& Cancellazione di una parola.\\
-    \macro{VLNEXT}  &\texttt{0x16}&(\verb|C-v|)& Carattere di escape, serve a
+    \const{VDISCARD}&\texttt{0x07}&(\verb|C-o|)& Non riconosciuto in Linux. \\
+    \const{VWERASE} &\texttt{0x17}&(\verb|C-w|)& Cancellazione di una parola.\\
+    \const{VLNEXT}  &\texttt{0x16}&(\verb|C-v|)& Carattere di escape, serve a
                                                  quotare il carattere
                                                  successivo che non viene
                                                  interpretato ma passato
                                                  direttamente all'output. \\
-    \macro{VEOL2}   &\texttt{0x00}& NUL & Ulteriore carattere di fine
+    \const{VEOL2}   &\texttt{0x00}& NUL & Ulteriore carattere di fine
                                           riga. Ha lo stesso effetto di
-                                          \macro{VEOL} ma può essere un
+                                          \const{VEOL} ma può essere un
                                           carattere diverso. \\
     \hline
   \end{tabular}
@@ -1557,13 +1557,13 @@ codice del tipo:
     value.c_cc[VEOL2] = '\n';
 \end{lstlisting}
 
-La maggior parte di questi caratteri (tutti tranne \macro{VTIME} e
-\macro{VMIN}) hanno effetto solo quando il terminale viene utilizzato in modo
+La maggior parte di questi caratteri (tutti tranne \const{VTIME} e
+\const{VMIN}) hanno effetto solo quando il terminale viene utilizzato in modo
 canonico; per alcuni devono essere essere soddisfatte ulteriori richieste, ad
-esempio \macro{VINTR}, \macro{VSUSP}, e \macro{VQUIT} richiedono sia settato
-\macro{ISIG}; \macro{VSTART} e \macro{VSTOP} richiedono sia settato
-\macro{IXON}; \macro{VLNEXT}, \macro{VWERASE}, \macro{VREPRINT} richiedono sia
-settato \macro{IEXTEN}.  In ogni caso quando vengono attivati i caratteri
+esempio \const{VINTR}, \const{VSUSP}, e \const{VQUIT} richiedono sia settato
+\const{ISIG}; \const{VSTART} e \const{VSTOP} richiedono sia settato
+\const{IXON}; \const{VLNEXT}, \const{VWERASE}, \const{VREPRINT} richiedono sia
+settato \const{IEXTEN}.  In ogni caso quando vengono attivati i caratteri
 vengono interpretati e non sono passati sulla coda di ingresso.
 
 Per leggere ed scrivere tutte le impostazioni dei terminali lo standard POSIX
@@ -1583,9 +1583,9 @@ andranno immagazzinate le impostazioni, il loro prototipo 
   \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
     caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{EINTR}] La funzione è stata interrotta. 
+    \item[\errcode{EINTR}] La funzione è stata interrotta. 
     \end{errlist}
-    ed inoltre \macro{EBADF}, \macro{ENOTTY} ed \macro{EINVAL}. 
+    ed inoltre \const{EBADF}, \const{ENOTTY} ed \const{EINVAL}. 
   }
 \end{functions}
 
@@ -1609,16 +1609,16 @@ terminale qualunque nella struttura puntata da \param{termios\_p};
 \func{tcsetattr} invece effettua la scrittura delle impostazioni e quando
 viene invocata sul proprio terminale di controllo può essere eseguita con
 successo solo da un processo in foreground.  Se invocata da un processo in
-background infatti tutto il gruppo riceverà un segnale di \macro{SIGTTOU} come
+background infatti tutto il gruppo riceverà un segnale di \const{SIGTTOU} come
 se si fosse tentata una scrittura, a meno che il processo chiamante non abbia
-\macro{SIGTTOU} ignorato o bloccato, nel qual caso l'operazione sarà eseguita.
+\const{SIGTTOU} ignorato o bloccato, nel qual caso l'operazione sarà eseguita.
 
 La funzione \func{tcsetattr} prevede tre diverse modalità di funzionamento,
 specificabili attraverso l'argomento \param{optional\_actions}, che permette
 di stabilire come viene eseguito il cambiamento delle impostazioni del
 terminale, i valori possibili sono riportati in
 \tabref{tab:sess_tcsetattr_option}; di norma (come fatto per le due funzioni
-di esempio) si usa sempre \macro{TCSANOW}, le altre opzioni possono essere
+di esempio) si usa sempre \const{TCSANOW}, le altre opzioni possono essere
 utili qualora si cambino i parametri di output.
 
 \begin{table}[htb]
@@ -1629,10 +1629,10 @@ utili qualora si cambino i parametri di output.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{TCSANOW}  & Esegue i cambiamenti in maniera immediata. \\
-    \macro{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
+    \const{TCSANOW}  & Esegue i cambiamenti in maniera immediata. \\
+    \const{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
                        tutto l'output presente sulle code è stato scritto. \\
-    \macro{TCSAFLUSH}& È identico a \macro{TCSADRAIN}, ma in più scarta
+    \const{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
                        tutti i dati presenti sulla coda di input.\\
     \hline
   \end{tabular}
@@ -1784,7 +1784,7 @@ la velocit
 del terminale quest'ultimo non potrà funzionare: quando il terminale non è
 seriale il valore non influisce sulla velocità di trasmissione dei dati. 
 
-In generale impostare un valore nullo (\macro{B0}) sulla linea di output fa si
+In generale impostare un valore nullo (\const{B0}) sulla linea di output fa si
 che il modem non asserisca più le linee di controllo, interrompendo di fatto
 la connessione, qualora invece si utilizzi questo valore per la linea di input
 l'effetto sarà quello di rendere la sua velocità identica a quella della linea
@@ -1827,7 +1827,7 @@ direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
 ingresso ed uscita e le relative code. In generale tutte queste funzioni
 vengono considerate, dal punto di vista dell'accesso al terminale, come delle
 funzioni di scrittura, pertanto se usate da processi in background sul loro
-terminale di controllo provocano l'emissione di \macro{SIGTTOU} come
+terminale di controllo provocano l'emissione di \const{SIGTTOU} come
 illustrato in \secref{sec:sess_ctrl_term}.\footnote{con la stessa eccezione,
   già vista per \func{tcsetaddr}, che quest'ultimo sia bloccato o ignorato dal
   processo chiamante.}
@@ -1843,8 +1843,8 @@ prototipo 
   break inviando un flusso di bit nulli.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà i valori \macro{EBADF} o
-    \macro{ENOTTY}.}
+    errore, nel qual caso \var{errno} assumerà i valori \const{EBADF} o
+    \const{ENOTTY}.}
 \end{functions}
 
 La funzione invia un flusso di bit nulli (che genera una condizione di break)
@@ -1865,8 +1865,8 @@ dell'interazione fra le code associate al terminale e l'utente; la prima 
   \funcdecl{int tcdrain(int fd)} Attende lo svuotamento della coda di output.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà i valori \macro{EBADF} o
-    \macro{ENOTTY}.}
+    errore, nel qual caso \var{errno} assumerà i valori \const{EBADF} o
+    \const{ENOTTY}.}
 \end{functions}
 
 La funzione blocca il processo fino a che tutto l'output presente sulla coda
@@ -1885,8 +1885,8 @@ di cancellando tutti i dati presenti al loro interno; il suo prototipo 
   nelle code di ingresso o di uscita.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà i valori \macro{EBADF} o
-    \macro{ENOTTY}.}
+    errore, nel qual caso \var{errno} assumerà i valori \const{EBADF} o
+    \const{ENOTTY}.}
 \end{functions}
 
 La funzione agisce sul terminale associato a \param{fd}, l'argomento
@@ -1904,9 +1904,9 @@ di uscita canceller
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \macro{TCIFLUSH} & Cancella i dati sulla coda di ingresso. \\
-    \macro{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
-    \macro{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
+    \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso. \\
+    \const{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
+    \const{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
     \hline
   \end{tabular}
   \caption{Possibili valori per l'argomento \param{queue} della
@@ -1927,8 +1927,8 @@ dei dati sul terminale; il suo prototipo 
   Sospende e rivvia il flusso dei dati sul terminale.
 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà i valori \macro{EBADF} o
-    \macro{ENOTTY}.}
+    errore, nel qual caso \var{errno} assumerà i valori \const{EBADF} o
+    \const{ENOTTY}.}
 \end{functions}
 
 La funzione permette di controllare (interrompendo e facendo riprendere) il
@@ -1945,11 +1945,11 @@ riportati in \secref{tab:sess_tcflow_action}.
     \textbf{Valore}& \textbf{Azione}\\
     \hline
     \hline
-    \macro{TCOOFF}& Sospende l'output.\\
-    \macro{TCOON} & Riprende un output precedentemente sospeso.\\
-    \macro{TCIOFF}& Il sistema trasmette un carattere di STOP, che 
+    \const{TCOOFF}& Sospende l'output.\\
+    \const{TCOON} & Riprende un output precedentemente sospeso.\\
+    \const{TCIOFF}& Il sistema trasmette un carattere di STOP, che 
                     fa interrompere la trasmissione dei dati dal terminale.  \\
-    \macro{TCION} & Il sistema trasmette un carattere di START, che 
+    \const{TCION} & Il sistema trasmette un carattere di START, che 
                     fa riprendere la trasmissione dei dati dal terminale.\\
     \hline
   \end{tabular}
@@ -1980,8 +1980,8 @@ caratteri NL, EOL, EOL2, EOF, ERASE, KILL, CR, REPRINT non vengono
 interpretati automaticamente ed inoltre, non dividendo più l'input in linee,
 il sistema non ha più un limite definito per quando ritornare i dati ad un
 processo. Per questo motivo abbiamo visto che in \var{c\_cc} sono previsti due
-caratteri speciali, MIN e TIME (specificati dagli indici \macro{VMIN} e
-\macro{VTIME} in \var{c\_cc}) che dicono al sistema di ritornare da una
+caratteri speciali, MIN e TIME (specificati dagli indici \const{VMIN} e
+\const{VTIME} in \var{c\_cc}) che dicono al sistema di ritornare da una
 \func{read} quando è stata letta una determinata quantità di dati o è passato
 un certo tempo.