Transizione \macro{} -> \const{}, \errcode{}, \val{}
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 7 Dec 2002 14:22:40 +0000 (14:22 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 7 Dec 2002 14:22:40 +0000 (14:22 +0000)
elemtcp.tex
errors.tex
fileadv.tex
filedir.tex
filestd.tex
fileunix.tex
intro.tex
macro.tex
process.tex
system.tex

index b7e7efa8f13cb0bbc2382a753e99e4395fc1b15b..1b306d662f55db28e8db58c83224cdee6f057846 100644 (file)
@@ -131,7 +131,7 @@ regolare la connessione. Normalmente vengono usate le seguenti opzioni:
   questa opzione ciascun capo della connessione annuncia all'altro il massimo
   ammontare di dati che vorrebbe accettare per ciascun segmento nella
   connessione corrente. È possibile leggere e scrivere questo valore
-  attraverso l'opzione del socket \macro{TCP\_MAXSEG}.
+  attraverso l'opzione del socket \const{TCP\_MAXSEG}.
   
 \item \textit{window scale option}; come spiegato in \capref{cha:tcp_protocol}
   il protocollo TCP implementa il controllo di flusso attraverso una
@@ -543,7 +543,7 @@ mettendosi in ascolto sulla porta 22 riservata a questo servizio e che si 
 posto in ascolto per connessioni provenienti da uno qualunque degli indirizzi
 associati alle interfacce locali; la notazione 0.0.0.0 usata da netstat è
 equivalente all'asterisco utilizzato per il numero di porta ed indica il
-valore generico, e corrisponde al valore \macro{INADDR\_ANY} definito in
+valore generico, e corrisponde al valore \const{INADDR\_ANY} definito in
 \file{arpa/inet.h}.
 
 Inoltre la porta e l'indirizzo di ogni eventuale connessione esterna non sono
@@ -658,11 +658,11 @@ ci si porr
     errore; in caso di errore la variabile \var{errno} viene impostata secondo
     i seguenti codici di errore:
   \begin{errlist}
-  \item[\macro{EBADF}] il file descriptor non è valido.
-  \item[\macro{EINVAL}] il socket ha già un indirizzo assegnato.
-  \item[\macro{ENOTSOCK}] il file descriptor non è associato ad un socket.
-  \item[\macro{EACCESS}] si è cercato di usare una porta riservata senza
-    sufficienti privilegi. 
+  \item[\errcode{EBADF}] il file descriptor non è valido.
+  \item[\errcode{EINVAL}] il socket ha già un indirizzo assegnato.
+  \item[\errcode{ENOTSOCK}] il file descriptor non è associato ad un socket.
+  \item[\errcode{EACCESS}] si è cercato di usare una porta riservata senza
+    sufficienti privilegi.
   \end{errlist}}
 \end{prototype}
 
@@ -693,7 +693,7 @@ indirizzo di origine l'indirizzo di destinazione specificato dal SYN del
 client. 
 
 Per specificare un indirizzo generico con IPv4 si usa il valore
-\macro{INADDR\_ANY}, il cui valore, come visto anche negli esempi precedenti
+\const{INADDR\_ANY}, il cui valore, come visto anche negli esempi precedenti
 è pari a zero, nell'esempio \figref{fig:net_serv_code} si è usata
 un'assegnazione immediata del tipo:
 
@@ -704,10 +704,10 @@ un'assegnazione immediata del tipo:
 \normalsize
 
 Si noti che si è usato \func{htonl} per assegnare il valore
-\macro{INADDR\_ANY}; benché essendo questo pari a zero il riordinamento sia
-inutile; ma dato che tutte le costanti \macro{INADDR\_} sono definite
+\const{INADDR\_ANY}; benché essendo questo pari a zero il riordinamento sia
+inutile; ma dato che tutte le costanti \val{INADDR\_} sono definite
 secondo l'ordinamento della macchina è buona norma usare sempre la funzione
-\macro{htonl}.
+\func{htonl}.
 
 L'esempio precedete funziona con IPv4 dato che l'indirizzo è rappresentabile
 anche con un intero a 32 bit; non si può usare lo stesso metodo con IPv6,
@@ -717,7 +717,7 @@ assegnazione.
 
 Per questo nell'header \file{netinet/in.h} è definita una variabile
 \type{in6addr\_any} (dichiarata come \ctyp{extern}, ed inizializzata dal
-sistema al valore \macro{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
+sistema al valore \const{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
 assegnazione del tipo: 
 
 \footnotesize
@@ -744,25 +744,26 @@ connessione con un server TCP, il prototipo della funzione 
     errore, in caso di errore la variabile \var{errno} viene impostata secondo
     i seguenti codici di errore:
   \begin{errlist}
-  \item[\macro{ECONNREFUSED}] non c'è nessuno in ascolto sull'indirizzo remoto.
-  \item[\macro{ETIMEDOUT}] si è avuto timeout durante il tentativo di
+  \item[\errcode{ECONNREFUSED}] non c'è nessuno in ascolto sull'indirizzo
+    remoto.
+  \item[\errcode{ETIMEDOUT}] si è avuto timeout durante il tentativo di
     connessione.
-  \item[\macro{ENETUNREACH}] la rete non è raggiungibile.
-  \item[\macro{EINPROGRESS}] il socket è non bloccante (vedi
+  \item[\errcode{ENETUNREACH}] la rete non è raggiungibile.
+  \item[\errcode{EINPROGRESS}] il socket è non bloccante (vedi
     \secref{sec:file_noblocking}) e la connessione non può essere conclusa
     immediatamente.
-  \item[\macro{EALREADY}] il socket è non bloccante (vedi
+  \item[\errcode{EALREADY}] il socket è non bloccante (vedi
     \secref{sec:file_noblocking}) e un tentativo precedente di connessione non
     si è ancora concluso.
-  \item[\macro{EAGAIN}] non ci sono più porte locali libere. 
-  \item[\macro{EAFNOSUPPORT}] l'indirizzo non ha una famiglia di indirizzi
+  \item[\errcode{EAGAIN}] non ci sono più porte locali libere. 
+  \item[\errcode{EAFNOSUPPORT}] l'indirizzo non ha una famiglia di indirizzi
     corretta nel relativo campo.
-  \item[\macro{EACCESS, EPERM}] si è tentato di eseguire una connessione ad un
-    indirizzo broadcast senza che il socket fosse stato abilitato per il
+  \item[\errcode{EACCESS, EPERM}] si è tentato di eseguire una connessione ad
+    un indirizzo broadcast senza che il socket fosse stato abilitato per il
     broadcast.
   \end{errlist}
-  altri errori possibili sono: \macro{EFAULT}, \macro{EBADF},
-  \macro{ENOTSOCK}, \macro{EISCONN} e \macro{EADDRINUSE}.}
+  altri errori possibili sono: \const{EFAULT}, \const{EBADF},
+  \const{ENOTSOCK}, \const{EISCONN} e \const{EADDRINUSE}.}
 \end{prototype}
 
 La struttura dell'indirizzo deve essere inizializzata con l'indirizzo IP e il
@@ -778,7 +779,7 @@ della rete e non da errori o problemi nella chiamata della funzione sono le
 seguenti:
 \begin{enumerate}
 \item Il client non riceve risposta al SYN: l'errore restituito è
-  \macro{ETIMEDOUT}. Stevens riporta che BSD invia un primo SYN alla chiamata
+  \errcode{ETIMEDOUT}. Stevens riporta che BSD invia un primo SYN alla chiamata
   di \func{connect}, un'altro dopo 6 secondi, un terzo dopo 24 secondi, se
   dopo 75 secondi non ha ricevuto risposta viene ritornato l'errore. Linux
   invece ripete l'emissione del SYN ad intervalli di 30 secondi per un numero
@@ -796,7 +797,7 @@ seguenti:
   che vuol dire probabilmente che o si è sbagliato il numero della porta o che
   non è stato avviato il server), questo è un errore fatale e la funzione
   ritorna non appena il RST viene ricevuto riportando un errore
-  \macro{ECONNREFUSED}.
+  \errcode{ECONNREFUSED}.
   
   Il flag RST sta per \textit{reset} ed è un segmento inviato direttamente
   dal TCP quando qualcosa non va. Tre condizioni che generano un RST sono:
@@ -809,7 +810,7 @@ seguenti:
   essere dovuto ad una condizione transitoria si ripete l'emissione dei SYN
   come nel caso precedente, fino al timeout, e solo allora si restituisce il
   codice di errore dovuto al messaggio ICMP, che da luogo ad un
-  \macro{ENETUNREACH}.
+  \errcode{ENETUNREACH}.
    
 \end{enumerate}
 
@@ -841,15 +842,15 @@ pagina di manuale 
   La funzione pone il socket specificato da \var{sockfd} in modalità
   passiva e predispone una coda per le connessioni in arrivo di lunghezza pari
   a \var{backlog}. La funzione si può applicare solo a socket di tipo
-  \macro{SOCK\_STREAM} o \macro{SOCK\_SEQPACKET}.
+  \const{SOCK\_STREAM} o \const{SOCK\_SEQPACKET}.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
-  \item[\macro{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
+  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
     operazione.
   \end{errlist}}
 \end{prototype}
@@ -857,7 +858,7 @@ pagina di manuale 
 
 Il parametro \var{backlog} indica il numero massimo di connessioni pendenti
 accettate; se esso viene ecceduto il client riceverà una errore di tipo
-\macro{ECONNREFUSED}, o se il protocollo, come nel caso del TCP, supporta la
+\errcode{ECONNREFUSED}, o se il protocollo, come nel caso del TCP, supporta la
 ritrasmissione, la richiesta sarà ignorata in modo che la connessione possa
 essere ritentata.
 
@@ -908,7 +909,7 @@ la \func{sysctl} o scrivendola direttamente in
 protezione dei syncookies però (con l'opzione da compilare nel kernel e da
 attivare usando \file{/proc/sys/net/ipv4/tcp\_syncookies}) questo valore
 viene ignorato e non esiste più un valore massimo.  In ogni caso in Linux il
-valore di \var{backlog} viene troncato ad un massimo di \macro{SOMAXCONN}
+valore di \var{backlog} viene troncato ad un massimo di \const{SOMAXCONN}
 se è superiore a detta costante (che di default vale 128).
 
 La scelta storica per il valore di questo parametro è di 5, e alcuni vecchi
@@ -962,29 +963,29 @@ viene messo in attesa. Il prototipo della funzione 
     \var{errno} viene impostata ai seguenti valori:
 
   \begin{errlist}
-  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
-  \item[\macro{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
-    operazione.    
-  \item[\macro{EAGAIN} o \macro{EWOULDBLOCK}] il socket è stato impostato come
-    non bloccante (vedi \secref{sec:file_noblocking}), e non ci sono
+  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
+    operazione.
+  \item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato
+    come non bloccante (vedi \secref{sec:file_noblocking}), e non ci sono
     connessioni in attesa di essere accettate.
-  \item[\macro{EPERM}] Le regole del firewall non consentono la connessione.
-  \item[\macro{ENOBUFS, ENOMEM}] questo spesso significa che l'allocazione
+  \item[\errcode{EPERM}] Le regole del firewall non consentono la connessione.
+  \item[\errcode{ENOBUFS, ENOMEM}] questo spesso significa che l'allocazione
     della memoria è limitata dai limiti sui buffer dei socket, non dalla
     memoria di sistema.
   \end{errlist}
   Inoltre possono essere restituiti gli errori di rete relativi al nuovo
-  socket come: \macro{EMFILE}, \macro{EINVAL}, \macro{ENOSR}, \macro{ENOBUFS},
-  \macro{EFAULT}, \macro{EPERM}, \macro{ECONNABORTED},
-  \macro{ESOCKTNOSUPPORT}, \macro{EPROTONOSUPPORT}, \macro{ETIMEDOUT},
-  \macro{ERESTARTSYS}.}
+  socket come: \const{EMFILE}, \const{EINVAL}, \const{ENOSR}, \const{ENOBUFS},
+  \const{EFAULT}, \const{EPERM}, \const{ECONNABORTED},
+  \const{ESOCKTNOSUPPORT}, \const{EPROTONOSUPPORT}, \const{ETIMEDOUT},
+  \const{ERESTARTSYS}.}
 \end{prototype}
 
 La funzione può essere usata solo con socket che supportino la connessione
-(cioè di tipo \macro{SOCK\_STREAM}, \macro{SOCK\_SEQPACKET} o
-\macro{SOCK\_RDM}). Per alcuni protocolli che richiedono una conferma
+(cioè di tipo \const{SOCK\_STREAM}, \const{SOCK\_SEQPACKET} o
+\const{SOCK\_RDM}). Per alcuni protocolli che richiedono una conferma
 esplicita della connessione, (attualmente in Linux solo DECnet ha questo
 comportamento), la funzione opera solo l'estrazione dalla coda delle
 connessioni, la conferma della connessione viene fatta implicitamente dalla
@@ -995,7 +996,7 @@ connessione viene fatto con la funzione \func{close}.
 errori rispetto ad altre implementazioni dei socket BSD, infatti la funzione
 \func{accept} passa gli errori di rete pendenti sul nuovo socket come codici
 di errore per \func{accept}. Inoltre la funzione non fa ereditare ai nuovi
-socket flag come \macro{O\_NONBLOCK}, che devono essere rispecificati volta
+socket flag come \const{O\_NONBLOCK}, che devono essere rispecificati volta
 volta, questo è un comportamento diverso rispetto a quanto accade con BSD e
 deve essere tenuto in conto per scrivere programmi portabili.
 
@@ -1006,7 +1007,7 @@ l'indirizzo del client da cui proviene la connessione. Prima della chiamata
 cui indirizzo è passato come argomento in \var{cliaddr}, al ritorno della
 funzione \var{addrlen} conterrà il numero di byte scritti dentro
 \var{cliaddr}. Se questa informazione non interessa basterà inizializzare a
-\macro{NULL} detti puntatori.
+\val{NULL} detti puntatori.
 
 Se la funzione ha successo restituisce il descrittore di un nuovo socket
 creato dal kernel (detto \textit{connected socket}) a cui viene associata la
@@ -1017,7 +1018,7 @@ creato all'inizio e messo in ascolto con \func{listen}, e non viene toccato
 dalla funzione.  Se non ci sono connessioni pendenti da accettare la funzione
 mette in attesa il processo\footnote{a meno che non si sia imopstato il socket
   per essere non bloccante (vedi \secref{sec:file_noblocking}), nel qual caso
-  ritorna con l'errore \macro{EAGAIN}.  Torneremo su questa modalità di
+  ritorna con l'errore \errcode{EAGAIN}.  Torneremo su questa modalità di
   operazione in \secref{sec:xxx_sock_noblock}.}  fintanto che non ne arriva
 una.
  
@@ -1207,12 +1208,12 @@ remoto.
 \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
   errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
-  \item[\macro{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
+  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item[\macro{EFAULT}] l'argomento \var{name} punta al di fuori dello
+  \item[\errcode{EFAULT}] l'argomento \var{name} punta al di fuori dello
     spazio di indirizzi del processo.
   \end{errlist}}
 \end{prototype}
@@ -1237,13 +1238,13 @@ quella connessione.
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
-  \item[\macro{ENOTCONN}] il socket non è connesso.
-  \item[\macro{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
+  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOTCONN}] il socket non è connesso.
+  \item[\errcode{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item[\macro{EFAULT}] l'argomento \var{name} punta al di fuori dello
+  \item[\errcode{EFAULT}] l'argomento \var{name} punta al di fuori dello
     spazio di indirizzi del processo.
   \end{errlist}}
 \end{prototype}
index 68e0584739e58deb34016721c162e3177dad2943..434decae7c7d7acb788f063c15e0eef4b47962a1 100644 (file)
@@ -35,94 +35,95 @@ attinenti ad errori che riguardano operazioni specifiche relative alla
 gestione dei file.
 
 \begin{description}
-\item \macro{EPERM} \textit{Operation not permitted}. L'operazione non è
+\item \errcode{EPERM} \textit{Operation not permitted}. L'operazione non è
   permessa: solo il proprietario del file o un processo con sufficienti
   privilegi può eseguire l'operazione.
-\item \macro{ENOENT} \textit{No such file or directory}. Il file indicato dal
+\item \errcode{ENOENT} \textit{No such file or directory}. Il file indicato dal
   pathname non esiste: o una delle componenti non esiste o il pathname
   contiene un link simbolico spezzato. Errore tipico di un riferimento ad un
   file che si suppone erroneamente essere esistente.
-\item \macro{EIO} \textit{Input/output error}. Errore di input/output: usato
+\item \errcode{EIO} \textit{Input/output error}. Errore di input/output: usato
   per riportare errori hardware in lettura/scrittura su un dispositivo.
-\item \macro{ENXIO} \textit{No such device or address}. Device inesistente: il
+\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 \macro{ENOEXEC} \textit{Invalid executable file format}. Il file non ha
+\item \errcode{ENOEXEC} \textit{Invalid executable file format}. Il file non ha
   un formato eseguibile, è un errore riscontrato dalle funzioni \func{exec}.
-\item \macro{EBADF} \textit{Bad file descriptor}. File descriptor non valido:
+\item \errcode{EBADF} \textit{Bad file descriptor}. File descriptor non valido:
   si è usato un file descriptor inesistente, o aperto in sola lettura per
   scrivere, o viceversa, o si è cercato di eseguire un'operazione non
   consentita per quel tipo di file descriptor.
-\item \macro{EACCESS} \textit{Permission denied}. Permesso negato; l'accesso
+\item \errcode{EACCESS} \textit{Permission denied}. Permesso negato; l'accesso
   al file non è consentito: i permessi del file o della directory non
   consentono l'operazione.
-\item \macro{ELOOP} \textit{Too many symbolic links encountered}. Ci sono
+\item \errcode{ELOOP} \textit{Too many symbolic links encountered}. Ci sono
   troppi link simbolici nella risoluzione di un pathname.  
-\item \macro{ENAMETOOLONG} \textit{File name too long}. Si è indicato un
+\item \errcode{ENAMETOOLONG} \textit{File name too long}. Si è indicato un
   pathname troppo lungo.
-\item \macro{ENOTBLK} \textit{Block device required}. Si è specificato un file
+\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 \macro{EEXIST} \textit{File exists}. Si è specificato un file esistente
+\item \errcode{EEXIST} \textit{File exists}. Si è specificato un file esistente
   in un contesto in cui ha senso solo specificare un nuovo file.
-\item \macro{EBUSY} \textit{Resource busy}. Una risorsa di sistema che non può
+\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 \macro{EXDEV} \textit{Cross-device link}. Si è tentato di creare un link
+\item \errcode{EXDEV} \textit{Cross-device link}. Si è tentato di creare un link
   diretto che attraversa due filesystem differenti.
-\item \macro{ENODEV} \textit{No such device}. Si è indicato un tipo di device
+\item \errcode{ENODEV} \textit{No such device}. Si è indicato un tipo di device
   sbagliato ad una funzione che ne richiede uno specifico.
-\item \macro{ENOTDIR} \textit{Not a directory}. Si è specificato un file che
+\item \errcode{ENOTDIR} \textit{Not a directory}. Si è specificato un file che
   non è una directory in una operazione che richiede una directory.
-\item \macro{EISDIR} \textit{Is a directory}. Il file specificato è una
+\item \errcode{EISDIR} \textit{Is a directory}. Il file specificato è una
   directory, non può essere aperto in scrittura, né si possono creare o
   rimuovere link diretti ad essa.
-\item \macro{EMFILE} \textit{Too many open files}. Il processo corrente ha
+\item \errcode{EMFILE} \textit{Too many open files}. Il processo corrente ha
   troppi file aperti e non può aprirne altri. Anche i descrittori duplicati
   vengono tenuti in conto\footnote{Il numero massimo di file aperti è
     controllabile dal sistema, in Linux si può usare il comando
     \cmd{ulimit}.}.
-\item \macro{ENFILE} \textit{File table overflow}. Ci sono troppi file aperti
+\item \errcode{ENFILE} \textit{File table overflow}. Ci sono troppi file aperti
   nel sistema. 
-\item \macro{ENOTTY} \textit{Not a terminal}. Si è tentata una operazione di
+\item \errcode{ENOTTY} \textit{Not a terminal}. Si è tentata una operazione di
   controllo relativa ad un terminale su un file che non lo è.
-\item \macro{ETXTBSY} \textit{Text file busy}. Si è cercato di eseguire un
+\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 \macro{EFBIG} \textit{File too big}. Si è ecceduto il limite imposto dal
+\item \errcode{EFBIG} \textit{File too big}. Si è ecceduto il limite imposto dal
   sistema sulla dimensione massima che un file può avere.
-\item \macro{ENOSPC} \textit{No space left on device}. la directory in cui si
+\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 \macro{ESPIPE} \textit{Invalid seek operation}. 
-\item \macro{EROFS} \textit{Read-only file system}.  il file risiede su un filesystem read-only.
-\item \macro{EMLINK} \textit{Too many links}. Ci sono troppi link al file (il
-   numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
+\item \errcode{ESPIPE} \textit{Invalid seek operation}. 
+\item \errcode{EROFS} \textit{Read-only file system}.  il file risiede su un
+  filesystem read-only.
+\item \errcode{EMLINK} \textit{Too many links}. Ci sono troppi link al file (il
+   numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi
   \secref{sec:sys_limits}).
-\item \macro{EPIPE} \textit{Broken pipe}. Non c'è un processo che stia
+\item \errcode{EPIPE} \textit{Broken pipe}. Non c'è un processo che stia
   leggendo l'altro capo della pipe. Ogni funzione che restituisce questo
-  errore genera anche un segnale \macro{SIGPIPE}, la cui azione predefinita è
+  errore genera anche un segnale \const{SIGPIPE}, la cui azione predefinita è
   terminare il programma; pertanto non si potrà vedere questo errore fintanto
-  che \macro{SIGPIPE} non viene gestito o bloccato.
-\item \macro{ENOTEMPTY} \textit{Directory not empty}. La directory non è vuota
-  quando l'operazione richiede che lo sia. È l'errore tipico che si ha quando
-  si cerca di cancellare una directory contenente dei file.
-\item \macro{EUSERS} \textit{Too many users}. Troppi utenti, il sistema delle
+  che \const{SIGPIPE} non viene gestito o bloccato.
+\item \errcode{ENOTEMPTY} \textit{Directory not empty}. La directory non è
+  vuota quando l'operazione richiede che lo sia. È l'errore tipico che si ha
+  quando si cerca di cancellare una directory contenente dei file.
+\item \errcode{EUSERS} \textit{Too many users}. Troppi utenti, il sistema delle
   quote rileva troppi utenti nel sistema.
-\item \macro{EDQUOT} \textit{Quota exceeded}. Si è ecceduta la quota di disco
+\item \errcode{EDQUOT} \textit{Quota exceeded}. Si è ecceduta la quota di disco
   dell'utente.
-\item \macro{ESTALE} \textit{Stale NFS file handle}. Indica un problema
+\item \errcode{ESTALE} \textit{Stale NFS file handle}. Indica un problema
   interno a NFS causato da cambiamenti del filesystem del sistema remoto. Per
   recuperare questa condizione in genere è necessario smontare e rimontare il
   filesystem NFS.
-\item \macro{EREMOTE} \textit{Object is remote}. Si è fatto un tentativo di
+\item \errcode{EREMOTE} \textit{Object is remote}. Si è fatto un tentativo di
   montare via NFS un filesystem remoto con un nome  che già specifica un
   filesystem montato via NFS. 
-\item \macro{ENOLCK} \textit{No locks available}. È usato dalle utilità per la
-  gestione del file lock; non viene generato da un sistema GNU, ma può
+\item \errcode{ENOLCK} \textit{No locks available}. È usato dalle utilità per
+  la gestione del file lock; non viene generato da un sistema GNU, ma può
   risultare da un'operazione su un server NFS di un altro sistema.
-\item \macro{EFTYPE} \textit{Inappropriate file type or format}. Il file è di
+\item \errcode{EFTYPE} \textit{Inappropriate file type or format}. Il file è di
   tipo sbagliato rispetto all'operazione richiesta o un file di dati ha un
   formato sbagliato. Alcuni sistemi restituiscono questo errore quando si
   cerca di impostare lo \textit{sticky bit} su un file che non è una directory.
@@ -138,16 +139,16 @@ attinenti ad errori che riguardano operazioni specifiche relative alla
 gestione dei processi.
 
 \begin{description}
-\item \macro{ESRCH} \textit{No process matches the specified process ID}. Non
+\item \errcode{ESRCH} \textit{No process matches the specified process ID}. Non
   esiste un processo con il \acr{pid} specificato.
-\item \macro{E2BIG} \textit{Argument list too long}. Lista degli argomenti
+\item \errcode{E2BIG} \textit{Argument list too long}. Lista degli argomenti
   troppo lunga: è una condizione prevista da POSIX quando la lista degli
   argomenti passata ad una delle funzioni \func{exec} occupa troppa memoria,
   non può mai accadere in GNU/Linux.
-\item \macro{ECHILD} \textit{There are no child processes}. Non esiste un
+\item \errcode{ECHILD} \textit{There are no child processes}. Non esiste un
   processo figlio. Viene rilevato dalle funzioni per la gestione dei processi
   figli. 
-%\item \macro{EPROCLIM} \textit{}.  Il limite dell'utente per nuovi processi
+%\item \errcode{EPROCLIM} \textit{}.  Il limite dell'utente per nuovi processi
 %  sarà ecceduto alla prossima \func{fork}. (non credo esista in linux)
 \end{description}
 
@@ -161,82 +162,82 @@ gestione dei socket e delle connessioni di rete.
 
 
 \begin{description}
-\item \macro{ENOTSOCK} \textit{Socket operation on non-socket}. Si è tentata
+\item \errcode{ENOTSOCK} \textit{Socket operation on non-socket}. Si è tentata
   un'operazione su un file descriptor che non è un socket quando invece era
   richiesto un socket.
-\item \macro{EMSGSIZE} \textit{Message too long}. Le dimensioni di un
+\item \errcode{EMSGSIZE} \textit{Message too long}. Le dimensioni di un
   messaggio inviato su un socket sono eccedono la massima lunghezza supportata.
-\item \macro{EPROTOTYPE} \textit{Protocol wrong type for socket}. Protocollo
+\item \errcode{EPROTOTYPE} \textit{Protocol wrong type for socket}. Protocollo
   sbagliato per il socket. Il socket usato non supporta il protocollo di
   comunicazione richiesto. 
-\item \macro{ENOPROTOOPT} \textit{Protocol not available}. Protocollo non
+\item \errcode{ENOPROTOOPT} \textit{Protocol not available}. Protocollo non
   disponibile. Si è richiesta un'opzione per il socket non disponibile con il
   protocollo usato.
-\item \macro{EPROTONOSUPPORT} \textit{Protocol not supported}. Protocollo non
+\item \errcode{EPROTONOSUPPORT} \textit{Protocol not supported}. Protocollo non
   supportato. Il tipo di socket non supporta il protocollo richiesto (un
   probabile errore nella specificazione del protocollo).
-\item \macro{ESOCKTNOSUPPORT} \textit{Socket type not supported}. Socket non
+\item \errcode{ESOCKTNOSUPPORT} \textit{Socket type not supported}. Socket non
   supportato. Il tipo di socket scelto non è supportato.
-\item \macro{EOPNOTSUPP} \textit{Operation not supported on transport
+\item \errcode{EOPNOTSUPP} \textit{Operation not supported on transport
     endpoint}. L'operazione richiesta non è supportata. Alcune funzioni non
   hanno senso per tutti i tipi di socket, ed altre non sono implementate per
   tutti i protocolli di trasmissione. Questo errore quando un socket non
   supporta una particolare operazione, e costituisce una indicazione generica
   che il server non sa cosa fare per la chiamata effettuata.
-\item \macro{EPFNOSUPPORT} \textit{Protocol family not supported}. Famiglia di
-  protocolli non supportata. La famiglia di protocolli richiesta non è
+\item \errcode{EPFNOSUPPORT} \textit{Protocol family not supported}. Famiglia
+  di protocolli non supportata. La famiglia di protocolli richiesta non è
   supportata.
-\item \macro{EAFNOSUPPORT} \textit{Address family not supported by protocol}.
+\item \errcode{EAFNOSUPPORT} \textit{Address family not supported by protocol}.
   Famiglia di indirizzi non supportata. La famiglia di indirizzi richiesta non
   è supportata, o è inconsistente con il protocollo usato dal socket.
-\item \macro{EADDRINUSE} \textit{Address already in use}. L'indirizzo del
+\item \errcode{EADDRINUSE} \textit{Address already in use}. L'indirizzo del
   socket richiesto è gia utilizzato (ad esempio si è richiesto il \func{bind}
   per una porta già in uso).
-\item \macro{EADDRNOTAVAIL} \textit{Cannot assign requested address}.
+\item \errcode{EADDRNOTAVAIL} \textit{Cannot assign requested address}.
   L'indirizzo richiesto non è disponibile (ad esempio si è cercato di dare al
   socket un nome che non corrisponde al nome della stazione locale).
-\item \macro{ENETDOWN} \textit{Network is down}. L'operazione sul socket è
+\item \errcode{ENETDOWN} \textit{Network is down}. L'operazione sul socket è
   fallita perché la rete è sconnessa.
-\item \macro{ENETUNREACH} \textit{Network is unreachable}. L'operazione è
+\item \errcode{ENETUNREACH} \textit{Network is unreachable}. L'operazione è
   fallita perché l'indirizzo richiesto è irraggiungibile (ad esempio la
   sottorete della stazione remota è irraggiungibile).
-\item \macro{ENETRESET} \textit{Network dropped connection because of reset}.
+\item \errcode{ENETRESET} \textit{Network dropped connection because of reset}.
   Una connessione è stata cancellata perché l'host remoto è caduto.
-\item \macro{ECONNABORTED} \textit{Software caused connection abort}. Una
+\item \errcode{ECONNABORTED} \textit{Software caused connection abort}. Una
   connessione è stata abortita localmente. 
-\item \macro{ECONNRESET} \textit{Connection reset by peer}. Una connessione è
+\item \errcode{ECONNRESET} \textit{Connection reset by peer}. Una connessione è
   stata chiusa per ragioni fuori dal controllo dell'host locale, come il
   riavvio di una macchina remota o un qualche errore non recuperabile sul
   protocollo.
-\item \macro{ENOBUFS} \textit{No buffer space available}. Tutti i buffer per
+\item \errcode{ENOBUFS} \textit{No buffer space available}. Tutti i buffer per
   le operazioni di I/O del kernel sono occupati. In generale questo errore è
-  sinonimo di \macro{ENOMEM}, ma attiene alle funzioni di input/output. In
+  sinonimo di \errcode{ENOMEM}, ma attiene alle funzioni di input/output. In
   caso di operazioni sulla rete si può ottenere questo errore invece
   dell'altro.
-\item \macro{EISCONN} \textit{Transport endpoint is already connected}. Si è
+\item \errcode{EISCONN} \textit{Transport endpoint is already connected}. Si è
   tentato di connettere un socket che è gia connesso.
-\item \macro{ENOTCONN} \textit{Transport endpoint is not connected}. Il socket
-  non è connesso a niente. Si ottiene questo errore quando si cerca di
+\item \errcode{ENOTCONN} \textit{Transport endpoint is not connected}. Il
+  socket non è connesso a niente. Si ottiene questo errore quando si cerca di
   trasmettere dati su un socket senza avere specificato in precedenza la loro
   destinazione. Nel caso di socket senza connessione (ad esempio socket UDP)
-  l'errore che si ottiene è \macro{EDESTADDRREQ}.
-\item \macro{EDESTADDRREQ} \textit{Destination address required}. Non c'è un
+  l'errore che si ottiene è \errcode{EDESTADDRREQ}.
+\item \errcode{EDESTADDRREQ} \textit{Destination address required}. Non c'è un
   indirizzo di destinazione predefinito per il socket. Si ottiene questo
   errore mandando dato su un socket senza connessione senza averne prima
   specificato una destinazione.
-\item \macro{ESHUTDOWN} \textit{Cannot send after transport endpoint
+\item \errcode{ESHUTDOWN} \textit{Cannot send after transport endpoint
     shutdown}. Il socket su cui si cerca di inviare dei dati ha avuto uno
   shutdown.
-\item \macro{ETOOMANYREFS} \textit{Too many references: cannot splice}. La
+\item \errcode{ETOOMANYREFS} \textit{Too many references: cannot splice}. La
   glibc dice ???
-\item \macro{ETIMEDOUT} \textit{Connection timed out}. Un'operazione sul
+\item \errcode{ETIMEDOUT} \textit{Connection timed out}. Un'operazione sul
   socket non ha avuto risposta entro il periodo di timeout.
-\item \macro{ECONNREFUSED} \textit{Connection refused}. Un host remoto ha
+\item \errcode{ECONNREFUSED} \textit{Connection refused}. Un host remoto ha
   rifiutato la connessione (in genere dipende dal fatto che non c'è un server
   per soddisfare il servizio richiesto).  
-\item \macro{EHOSTDOWN} \textit{Host is down}. L'host remoto di una
+\item \errcode{EHOSTDOWN} \textit{Host is down}. L'host remoto di una
   connessione è giù.
-\item \macro{EHOSTUNREACH} \textit{No route to host}.  L'host remoto di una
+\item \errcode{EHOSTUNREACH} \textit{No route to host}.  L'host remoto di una
   connessione non è raggiungibile.
 \end{description}
 
@@ -247,36 +248,37 @@ attinenti ad errori generici, si trovano qui tutti i codici di errore non
 specificati nelle sezioni precedenti.
 
 \begin{description}
-\item \macro{EINTR} \textit{Interrupted function call}. Una funzione di
+\item \errcode{EINTR} \textit{Interrupted function call}. Una funzione di
   libreria è stata interrotta. In genere questo avviene causa di un segnale
   asincrono al processo che impedisce la conclusione della chiamata. In questo
   caso è necessario ripetere la chiamata alla funzione. 
-\item \macro{ENOMEM} \textit{No memory available}. Il kernel non è in grado di
-  allocare ulteriore memoria per completare l'operazione richiesta.
-\item \macro{EDEADLK} \textit{Deadlock avoided}. L'allocazione di una risorsa
-  avrebbe causato un deadlock. Non sempre il sistema è in grado di riconoscere
-  queste situazioni, nel qual caso si avrebbe in blocco. 
-\item \macro{EFAULT} \textit{Bad address}. Una stringa passata come parametro
+\item \errcode{ENOMEM} \textit{No memory available}. Il kernel non è in grado
+  di allocare ulteriore memoria per completare l'operazione richiesta.
+\item \errcode{EDEADLK} \textit{Deadlock avoided}. L'allocazione di una
+  risorsa avrebbe causato un \textit{deadlock}\index{deadlock}. Non sempre il
+  sistema è in grado di riconoscere queste situazioni, nel qual caso si
+  avrebbe in blocco.
+\item \errcode{EFAULT} \textit{Bad address}. Una stringa passata come parametro
   è fuori dello spazio di indirizzi del processo, in genere questa situazione
   provoca l'emissione di un segnale di \textit{segment violation}
-  (\macro{SIGSEGV}).
-\item \macro{EINVAL} \textit{Invalid argument}. Errore utilizzato per
+  (\const{SIGSEGV}).
+\item \errcode{EINVAL} \textit{Invalid argument}. Errore utilizzato per
   segnalare vari tipi di problemi dovuti all'aver passato un argomento
   sbagliato ad una funzione di libreria.
-\item \macro{EDOM} \textit{Domain error}. È usato dalle funzioni matematiche
+\item \errcode{EDOM} \textit{Domain error}. È usato dalle funzioni matematiche
   quando il valore di un argomento è al di fuori dell'intervallo in cui sono
   definite. 
-\item \macro{ERANGE} \textit{Range error}. È usato dalle funzioni matematiche
+\item \errcode{ERANGE} \textit{Range error}. È usato dalle funzioni matematiche
   quando il risultato non è rappresentabile a causa di un overflow o di un
   underflow.
-\item \macro{EAGAIN} \textit{Resource temporarily unavailable}. La funzione è
+\item \errcode{EAGAIN} \textit{Resource temporarily unavailable}. La funzione è
   fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo errore
   accade in due tipologie di situazioni:
   \begin{itemize}
   \item Si è effettuata un'operazione che si sarebbe bloccata su un oggetto
     che è stato posto in modalità non bloccante. Nei vecchi sistemi questo era
-    un codice diverso, \macro{EWOULDBLOCK}. In genere questo ha a che fare con
-    file o socket, per i quali si può usare la funzione \func{select}  per
+    un codice diverso, \errcode{EWOULDBLOCK}. In genere questo ha a che fare
+    con file o socket, per i quali si può usare la funzione \func{select} per
     vedere quando l'operazione richiesta (lettura, scrittura o connessione)
     diventa possibile.
   \item Indica la carenza di una risorsa di sistema che non è al momento
@@ -287,57 +289,61 @@ specificati nelle sezioni precedenti.
     carenza è spesso indice di qualcosa che non va nel sistema, è pertanto
     opportuno segnalare esplicitamente questo tipo di errori.
   \end{itemize}
-\item \macro{EWOULDBLOCK} \textit{Operation would block}. In Linux è identico
-  a \macro{EAGAIN}.
-\item \macro{EINPROGRESS} \textit{Operation now in progress}. Operazione in
+\item \errcode{EWOULDBLOCK} \textit{Operation would block}. In Linux è identico
+  a \errcode{EAGAIN}.
+\item \errcode{EINPROGRESS} \textit{Operation now in progress}. Operazione in
   corso. Un'operazione che non può essere completata immediatamente è stata
   avviata su un oggetto posto in modalità non-bloccante. Questo errore viene
   riportato per operazioni che si dovrebbero sempre bloccare (come per una
-  \func{connect}) e che pertanto non possono riportare \macro{EAGAIN},
+  \func{connect}) e che pertanto non possono riportare \errcode{EAGAIN},
   l'errore indica che l'operazione è stata avviata correttamente e occorrerà
   del tempo perché si possa completare. La ripetizione della chiamata darebbe
-  luogo ad un errore \macro{EALREADY}.
-\item \macro{EALREADY} \textit{Operation already in progress}. L'operazione è
+  luogo ad un errore \errcode{EALREADY}.
+\item \errcode{EALREADY} \textit{Operation already in progress}. L'operazione è
   già in corso. Si è tentata un'operazione già in corso su un oggetto posto in
   modalità non-bloccante.
-\item \macro{ENOSYS} \textit{Function not implemented}. Indica che la funzione
-  non è implementata o nelle librerie del C o nel kernel. 
-\item \macro{ENOTSUP} \textit{Not supported}. Una funzione ritorna questo
+\item \errcode{ENOSYS} \textit{Function not implemented}. Indica che la
+  funzione non è supportata o nelle librerie del C o nel kernel. Può dipendere
+  sia dalla mancanza di una implementazione, che dal fatto che non si è
+  abilitato l'opportuno supporto nel kernel; nel caso di Linux questo può
+  voler dire anche che un modulo necessario non è stato caricato nel sistema.
+\item \errcode{ENOTSUP} \textit{Not supported}. Una funzione ritorna questo
   errore quando i parametri sono validi ma l'operazione richiesta non è
   supportata. Questo significa che la funzione non implementa quel particolare
   comando o opzione o che, in caso di oggetti specifici (file descriptor o
   altro) non è in grado di supportare i parametri richiesti.
-\item \macro{EILSEQ} \textit{Illegal byte sequence}. Nella decodifica di un
+\item \errcode{EILSEQ} \textit{Illegal byte sequence}. Nella decodifica di un
   carattere multibyte si è avuta una sequenza errata o incompleta o si è
   specificato un valore non valido.
 \end{description}
 
 
 \begin{description}
-%\item \macro{EBADRPC} \textit{}. 
-%\item \macro{ERPCMISMATCH} \textit{}. 
-%\item \macro{EPROGUNAVAIL} \textit{}. 
-%\item \macro{EPROGMISMATCH} \textit{}. 
-%\item \macro{EPROCUNAVAIL} \textit{}. 
-%\item \macro{EAUTH} \textit{}. 
-%\item \macro{ENEEDAUTH} \textit{}. 
-%\item \macro{EBACKGROUND} \textit{}. 
-%\item \macro{EDIED} \textit{}. 
-%\item \macro{ED} \textit{}. 
-%\item \macro{EGREGIOUS} \textit{}. 
-%\item \macro{EIEIO} \textit{}. 
-%\item \macro{EGRATUITOUS} \textit{}. 
-\item \macro{EBADMSG} \textit{Not a data message}. 
-\item \macro{EIDRM} \textit{Identifier removed}. 
-\item \macro{EMULTIHOP} \textit{Multihop attempted}. 
-\item \macro{ENODATA} \textit{No data available}. 
-\item \macro{ENOLINK} \textit{Link has been severed}. 
-\item \macro{ENOMSG} \textit{No message of desired type}. 
-\item \macro{ENOSR} \textit{Out of streams resources}. 
-\item \macro{ENOSTR} \textit{Device not a stream}. 
-\item \macro{EOVERFLOW} \textit{Value too large for defined data type}. 
-\item \macro{EPROTO} \textit{Protocol error}. 
-\item \macro{ETIME} \textit{Timer expired}. 
+%\item \errcode{EBADRPC} \textit{}. 
+%\item \errcode{ERPCMISMATCH} \textit{}. 
+%\item \errcode{EPROGUNAVAIL} \textit{}. 
+%\item \errcode{EPROGMISMATCH} \textit{}. 
+%\item \errcode{EPROCUNAVAIL} \textit{}. 
+%\item \errcode{EAUTH} \textit{}. 
+%\item \errcode{ENEEDAUTH} \textit{}. 
+%\item \errcode{EBACKGROUND} \textit{}. 
+%\item \errcode{EDIED} \textit{}. 
+%\item \errcode{ED} \textit{}. 
+%\item \errcode{EGREGIOUS} \textit{}. 
+%\item \errcode{EIEIO} \textit{}. 
+%\item \errcode{EGRATUITOUS} \textit{}. 
+\item \errcode{EBADMSG} \textit{Not a data message}. 
+\item \errcode{EIDRM} \textit{Identifier removed}. Indica che l'oggetto del
+  \textit{SysV IPC} cui si fa riferimento è stato cancellato.
+\item \errcode{EMULTIHOP} \textit{Multihop attempted}. 
+\item \errcode{ENODATA} \textit{No data available}. 
+\item \errcode{ENOLINK} \textit{Link has been severed}. 
+\item \errcode{ENOMSG} \textit{No message of desired type}. 
+\item \errcode{ENOSR} \textit{Out of streams resources}. 
+\item \errcode{ENOSTR} \textit{Device not a stream}. 
+\item \errcode{EOVERFLOW} \textit{Value too large for defined data type}. 
+\item \errcode{EPROTO} \textit{Protocol error}. 
+\item \errcode{ETIME} \textit{Timer expired}. 
 \end{description}
 
 
@@ -352,45 +358,45 @@ sono usati dalle funzioni di libreria, ma vengono riportati da alcune system
 call (TODO verificare i dettagli, eventualmente cassare).
 
 \begin{description}
-\item \macro{ERESTART} \textit{Interrupted system call should be restarted}. 
-\item \macro{ECHRNG} \textit{Channel number out of range}. 
-\item \macro{EL2NSYNC} \textit{Level 2 not synchronized}. 
-\item \macro{EL3HLT} \textit{Level 3 halted}. 
-\item \macro{EL3RST} \textit{Level 3 reset}. 
-\item \macro{ELNRNG} \textit{Link number out of range}. 
-\item \macro{EUNATCH} \textit{Protocol driver not attached}. 
-\item \macro{ENOCSI} \textit{No CSI structure available}. 
-\item \macro{EL2HLT} \textit{Level 2 halted}. 
-\item \macro{EBADE} \textit{Invalid exchange}. 
-\item \macro{EBADR} \textit{Invalid request descriptor}. 
-\item \macro{EXFULL} \textit{Exchange full}. 
-\item \macro{ENOANO} \textit{No anode}. 
-\item \macro{EBADRQC} \textit{Invalid request code}. 
-\item \macro{EBADSLT} \textit{Invalid slot}. 
-\item \macro{EDEADLOCK} Identico a \macro{EDEADLK}. 
-\item \macro{EBFONT} \textit{Bad font file format}. 
-\item \macro{ENONET} \textit{Machine is not on the network}. 
-\item \macro{ENOPKG} \textit{Package not installed}. 
-\item \macro{EADV} \textit{Advertise error}. 
-\item \macro{ESRMNT} \textit{Srmount error}. 
-\item \macro{ECOMM} \textit{Communication error on send}. 
-\item \macro{EDOTDOT} \textit{RFS specific error}. 
-\item \macro{ENOTUNIQ} \textit{Name not unique on network}. 
-\item \macro{EBADFD} \textit{File descriptor in bad state}. 
-\item \macro{EREMCHG} \textit{Remote address changed}. 
-\item \macro{ELIBACC} \textit{Can not access a needed shared library}. 
-\item \macro{ELIBBAD} \textit{Accessing a corrupted shared library}. 
-\item \macro{ELIBSCN} \textit{.lib section in a.out corrupted}. 
-\item \macro{ELIBMAX} \textit{Attempting to link in too many shared libraries}. 
-\item \macro{ELIBEXEC} \textit{Cannot exec a shared library directly}. 
-\item \macro{ESTRPIPE} \textit{Streams pipe error}. 
-\item \macro{EUCLEAN} \textit{Structure needs cleaning}. 
-\item \macro{ENAVAIL} \textit{No XENIX semaphores available}. 
-\item \macro{EISNAM} \textit{Is a named type file}. 
-\item \macro{EREMOTEIO} \textit{Remote I/O error}. 
-\item \macro{ENOMEDIUM} \textit{No medium found}. 
-\item \macro{EMEDIUMTYPE} \textit{Wrong medium type}. 
-\item \macro{} \textit{}. 
+\item \errcode{ERESTART} \textit{Interrupted system call should be restarted}. 
+\item \errcode{ECHRNG} \textit{Channel number out of range}. 
+\item \errcode{EL2NSYNC} \textit{Level 2 not synchronized}. 
+\item \errcode{EL3HLT} \textit{Level 3 halted}. 
+\item \errcode{EL3RST} \textit{Level 3 reset}. 
+\item \errcode{ELNRNG} \textit{Link number out of range}. 
+\item \errcode{EUNATCH} \textit{Protocol driver not attached}. 
+\item \errcode{ENOCSI} \textit{No CSI structure available}. 
+\item \errcode{EL2HLT} \textit{Level 2 halted}. 
+\item \errcode{EBADE} \textit{Invalid exchange}. 
+\item \errcode{EBADR} \textit{Invalid request descriptor}. 
+\item \errcode{EXFULL} \textit{Exchange full}. 
+\item \errcode{ENOANO} \textit{No anode}. 
+\item \errcode{EBADRQC} \textit{Invalid request code}. 
+\item \errcode{EBADSLT} \textit{Invalid slot}. 
+\item \errcode{EDEADLOCK} Identico a \errcode{EDEADLK}. 
+\item \errcode{EBFONT} \textit{Bad font file format}. 
+\item \errcode{ENONET} \textit{Machine is not on the network}. 
+\item \errcode{ENOPKG} \textit{Package not installed}. 
+\item \errcode{EADV} \textit{Advertise error}. 
+\item \errcode{ESRMNT} \textit{Srmount error}. 
+\item \errcode{ECOMM} \textit{Communication error on send}. 
+\item \errcode{EDOTDOT} \textit{RFS specific error}. 
+\item \errcode{ENOTUNIQ} \textit{Name not unique on network}. 
+\item \errcode{EBADFD} \textit{File descriptor in bad state}. 
+\item \errcode{EREMCHG} \textit{Remote address changed}. 
+\item \errcode{ELIBACC} \textit{Can not access a needed shared library}. 
+\item \errcode{ELIBBAD} \textit{Accessing a corrupted shared library}. 
+\item \errcode{ELIBSCN} \textit{.lib section in a.out corrupted}. 
+\item \errcode{ELIBMAX} \textit{Attempting to link in too many shared
+    libraries}.
+\item \errcode{ELIBEXEC} \textit{Cannot exec a shared library directly}. 
+\item \errcode{ESTRPIPE} \textit{Streams pipe error}. 
+\item \errcode{EUCLEAN} \textit{Structure needs cleaning}. 
+\item \errcode{ENAVAIL} \textit{No XENIX semaphores available}. 
+\item \errcode{EISNAM} \textit{Is a named type file}. 
+\item \errcode{EREMOTEIO} \textit{Remote I/O error}. 
+\item \errcode{ENOMEDIUM} \textit{No medium found}. 
+\item \errcode{EMEDIUMTYPE} \textit{Wrong medium type}. 
 \end{description}
 
 
index 8a135b53066459bb045a57f45a7efe45069767a9..c73a8dfa0fb32a4057ecd06bd8a46fcfc836522b 100644 (file)
@@ -48,10 +48,10 @@ inutilmente, e nel peggiore si potrebbe addirittura arrivare ad un
 
 Abbiamo già accennato in \secref{sec:file_open} che è possibile prevenire
 questo tipo di comportamento aprendo un file in modalità
-\textsl{non-bloccante}, attraverso l'uso del flag \macro{O\_NONBLOCK} nella
+\textsl{non-bloccante}, attraverso l'uso del flag \const{O\_NONBLOCK} nella
 chiamata di \func{open}. In questo caso le funzioni di input/output che
 altrimenti si sarebbero bloccate ritornano immediatamente, restituendo
-l'errore \macro{EAGAIN}.
+l'errore \errcode{EAGAIN}.
 
 L'utilizzo di questa modalità di I/O permette di risolvere il problema
 controllando a turno i vari file descriptor, in un ciclo in cui si ripete
@@ -92,12 +92,12 @@ BSD,\footnote{la funzione 
     descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual
     caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno
+  \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
   degli insiemi.
-  \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
-  \item[\macro{EINVAL}] Si è specificato per \param{n} un valore negativo.
+  \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+  \item[\errcode{EINVAL}] Si è specificato per \param{n} un valore negativo.
   \end{errlist}
-  ed inoltre \macro{ENOMEM}.
+  ed inoltre \const{ENOMEM}.
 }
 \end{functions}
 
@@ -132,7 +132,7 @@ opportune macro di preprocessore:
 \end{functions}
 
 In genere un \textit{file descriptor set} può contenere fino ad un massimo di
-\macro{FD\_SETSIZE} file descriptor.  Questo valore in origine corrispondeva
+\const{FD\_SETSIZE} file descriptor.  Questo valore in origine corrispondeva
 al limite per il numero massimo di file aperti\footnote{ad esempio in Linux,
   fino alla serie 2.0.x, c'era un limite di 256 file per processo.}, ma
 quando, come nelle versioni più recenti del kernel, non c'è più un limite
@@ -148,12 +148,12 @@ un \textit{socket}\index{socket}, vedi \secref{sec:xxx_urgent}).
 
 La funzione inoltre richiede anche di specificare, tramite l'argomento
 \param{n}, un valore massimo del numero dei file descriptor usati
-nell'insieme; si può usare il già citato \macro{FD\_SETSIZE}, oppure il numero
+nell'insieme; si può usare il già citato \const{FD\_SETSIZE}, oppure il numero
 più alto dei file descriptor usati nei tre insiemi, aumentato di uno.
 
 Infine l'argomento \param{timeout}, specifica un tempo massimo di
 attesa\footnote{il tempo è valutato come \textit{elapsed time}.} prima che la
-funzione ritorni; se impostato a \macro{NULL} la funzione attende
+funzione ritorni; se impostato a \val{NULL} la funzione attende
 indefinitamente. Si può specificare anche un tempo nullo (cioè una \var{struct
   timeval} con i campi impostati a zero), qualora si voglia semplicemente
 controllare lo stato corrente dei file descriptor.
@@ -162,13 +162,13 @@ La funzione restituisce il totale dei file descriptor pronti nei tre insiemi,
 il valore zero indica sempre che si è raggiunto un timeout. Ciascuno dei tre
 insiemi viene sovrascritto per indicare quale file descriptor è pronto per le
 operazioni ad esso relative, in modo da poterlo controllare con la macro
-\macro{FD\_ISSET}. In caso di errore la funzione restituisce -1 e gli insiemi
+\const{FD\_ISSET}. In caso di errore la funzione restituisce -1 e gli insiemi
 non vengono toccati.
 
 In Linux \func{select} modifica anche il valore di \param{timeout},
 impostandolo al tempo restante; questo è utile quando la funzione viene
 interrotta da un segnale, in tal caso infatti si ha un errore di
-\macro{EINTR}, ed occorre rilanciare la funzione; in questo modo non è
+\errcode{EINTR}, ed occorre rilanciare la funzione; in questo modo non è
 necessario ricalcolare tutte le volte il tempo rimanente.\footnote{questo può
   causare problemi di portabilità sia quando si trasporta codice scritto su
   Linux che legge questo valore, sia quando si usano programmi scritti per
@@ -193,11 +193,11 @@ specificati da \param{ufds}.
   caso di successo, o 0 se c'è stato un timeout; in caso di errore viene
   restituito  -1 ed \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno
+  \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
   degli insiemi.
-  \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+  \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
   \end{errlist}
-  ed inoltre \macro{EFAULT} e \macro{ENOMEM}.}
+  ed inoltre \const{EFAULT} e \const{ENOMEM}.}
 \end{prototype}
 
 La funzione tiene sotto controllo un numero \param{ndfs} di file descriptor
@@ -239,21 +239,21 @@ vengono utilizzati solo per \var{revents} come valori in uscita).
     \textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{POLLIN}    & 0x001 & È possibile la lettura immediata.\\
-    \macro{POLLPRI}   & 0x002 & Sono presenti dati urgenti.\\
-    \macro{POLLOUT}   & 0x004 & È possibile la scrittura immediata.\\
+    \const{POLLIN}    & 0x001 & È possibile la lettura immediata.\\
+    \const{POLLPRI}   & 0x002 & Sono presenti dati urgenti.\\
+    \const{POLLOUT}   & 0x004 & È possibile la scrittura immediata.\\
     \hline
-    \macro{POLLERR}   & 0x008 & C'è una condizione di errore.\\
-    \macro{POLLHUP}   & 0x010 & Si è verificato un hung-up.\\
-    \macro{POLLNVAL}  & 0x020 & Il file descriptor non è aperto.\\
+    \const{POLLERR}   & 0x008 & C'è una condizione di errore.\\
+    \const{POLLHUP}   & 0x010 & Si è verificato un hung-up.\\
+    \const{POLLNVAL}  & 0x020 & Il file descriptor non è aperto.\\
     \hline
-    \macro{POLLRDNORM}& 0x040 & Sono disponibili in lettura dati normali.\\ 
-    \macro{POLLRDBAND}& 0x080 & Sono disponibili in lettura dati ad alta 
+    \const{POLLRDNORM}& 0x040 & Sono disponibili in lettura dati normali.\\ 
+    \const{POLLRDBAND}& 0x080 & Sono disponibili in lettura dati ad alta 
                                 priorità. \\
-    \macro{POLLWRNORM}& 0x100 & È possibile la scrittura di dati normali.  \\ 
-    \macro{POLLWRBAND}& 0x200 & È possibile la scrittura di dati ad 
+    \const{POLLWRNORM}& 0x100 & È possibile la scrittura di dati normali.  \\ 
+    \const{POLLWRBAND}& 0x200 & È possibile la scrittura di dati ad 
                                 alta priorità. \\
-    \macro{POLLMSG}   & 0x400 & Estensione propria di Linux.\\
+    \const{POLLMSG}   & 0x400 & Estensione propria di Linux.\\
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit dei campi
@@ -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 \macro{\_GNU\_SOURCE} e nelle
-  \acr{glibc} 2.2.2-2.2.4 se si è definito \macro{\_XOPEN\_SOURCE} con valore
+  \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
   maggiore di 600.} il cui prototipo è:
 \begin{prototype}{sys/select.h}
   {int pselect(int n, fd\_set *readfds, fd\_set *writefds, fd\_set *exceptfds,
@@ -293,12 +293,12 @@ sostituisce i precedenti, ed aggiunge a \func{select} una nuova funzione
     descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual
     caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno
+  \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
   degli insiemi.
-  \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
-  \item[\macro{EINVAL}] Si è specificato per \param{n} un valore negativo.
+  \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+  \item[\errcode{EINVAL}] Si è specificato per \param{n} un valore negativo.
   \end{errlist}
-  ed inoltre \macro{ENOMEM}.}
+  ed inoltre \const{ENOMEM}.}
 \end{prototype}
 
 La funzione è sostanzialmente identica a \func{select}, solo che usa una
@@ -333,19 +333,19 @@ richiesta preventiva di dati, in modo da poter effettuare in contemporanea le
 operazioni di calcolo e quelle di I/O.
 
 Abbiamo accennato in \secref{sec:file_open} che è possibile, attraverso l'uso
-del flag \macro{O\_ASYNC},\footnote{l'uso del flag di \macro{O\_ASYNC} e dei
-  comandi \macro{F\_SETOWN} e \macro{F\_GETOWN} per \func{fcntl} è specifico
+del flag \const{O\_ASYNC},\footnote{l'uso del flag di \const{O\_ASYNC} e dei
+  comandi \const{F\_SETOWN} e \const{F\_GETOWN} per \func{fcntl} è specifico
   di Linux e BSD.} aprire un file in modalità asincrona, così come è possibile
 attivare in un secondo tempo questa modalità impostando questo flag attraverso
-l'uso di \func{fcntl} con il comando \macro{F\_SETFL} (vedi
+l'uso di \func{fcntl} con il comando \const{F\_SETFL} (vedi
 \secref{sec:file_fcntl}).
 
 In realtà in questo caso non si tratta di I/O asincrono vero e proprio, quanto
 di un meccanismo asincrono di notifica delle variazione dello stato del file
 descriptor; quello che succede è che il sistema genera un segnale (normalmente
-\macro{SIGIO}, ma è possibile usarne altri) tutte le volte che diventa
+\const{SIGIO}, ma è possibile usarne altri) tutte le volte che diventa
 possibile leggere o scrivere dal file descriptor che si è posto in questa
-modalità. Si può inoltre selezionare, con il comando \macro{F\_SETOWN} di
+modalità. Si può inoltre selezionare, con il comando \const{F\_SETOWN} di
 \func{fcntl}, quale processo (o gruppo di processi) riceverà il segnale. 
 
 In questo modo si può evitare l'uso delle funzioni \func{poll} o \func{select}
@@ -366,10 +366,10 @@ attraverso la struttura \type{siginfo\_t}, utilizzando la forma estesa
 
 Per far questo però occorre utilizzare le funzionalità dei segnali real-time
 (vedi \secref{sec:sig_real_time}) impostando esplicitamente con il comando
-\macro{F\_SETSIG} di \func{fcntl} un segnale real-time da inviare in caso di
-I/O asincrono (il segnale predefinito è \macro{SIGIO}). In questo caso il
-manipolatore tutte le volte che riceverà \macro{SI\_SIGIO} come valore del
-campo \var{si\_code}\footnote{il valore resta \macro{SI\_SIGIO} qualunque sia
+\const{F\_SETSIG} di \func{fcntl} un segnale real-time da inviare in caso di
+I/O asincrono (il segnale predefinito è \const{SIGIO}). In questo caso il
+manipolatore tutte le volte che riceverà \const{SI\_SIGIO} come valore del
+campo \var{si\_code}\footnote{il valore resta \const{SI\_SIGIO} qualunque sia
   il segnale che si è associato all'I/O asincrono, ed indica appunto che il
   segnale è stato generato a causa di attività nell'I/O asincrono.} di
 \type{siginfo\_t}, troverà nel campo \var{si\_fd} il valore del file
@@ -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 \macro{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la
+definita la macro \const{\_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 \macro{\_POSIX\_PRIORITIZED\_IO}, e
-  \macro{\_POSIX\_PRIORITY\_SCHEDULING}.} La priorità viene impostata a
+  le macro \const{\_POSIX\_PRIORITIZED\_IO}, e
+  \const{\_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.
 
@@ -491,13 +491,13 @@ notifica del completamento delle operazioni richieste. La struttura 
 riportata in \secref{fig:file_sigevent}; il campo \var{sigev\_notify} è quello
 che indica le modalità della notifica, esso può assumere i tre valori:
 \begin{basedescript}{\desclabelwidth{3.0cm}}
-\item[\macro{SIGEV\_NONE}]   Non viene inviata nessuna notifica.
-\item[\macro{SIGEV\_SIGNAL}] La notifica viene effettuata inviando al processo
+\item[\const{SIGEV\_NONE}]   Non viene inviata nessuna notifica.
+\item[\const{SIGEV\_SIGNAL}] La notifica viene effettuata inviando al processo
   chiamante il segnale specificato nel campo \var{sigev\_signo}, se il
-  manipolatore è installato con \macro{SA\_SIGINFO}, il gli verrà restituito
+  manipolatore è installato con \const{SA\_SIGINFO}, il gli verrà restituito
   il valore di \var{sigev\_value} in come valore del campo \var{si\_value} per
   \type{siginfo\_t}.
-\item[\macro{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo
+\item[\const{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo
   thread che esegue la funzione specificata da \var{sigev\_notify\_function},
   con gli attributi specificati da \var{sigev\_notify\_attribute}.
 \end{basedescript}
@@ -519,18 +519,18 @@ appena descritta; i rispettivi prototipi sono:
   \bodydesc{Le funzioni restituiscono 0 in caso di successo, e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato.
-  \item[\macro{ENOSYS}] La funzione non è implementata.
-  \item[\macro{EINVAL}] Si è specificato un valore non valido per i campi
+  \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato.
+  \item[\errcode{ENOSYS}] La funzione non è implementata.
+  \item[\errcode{EINVAL}] Si è specificato un valore non valido per i campi
     \var{aio\_offset} o \var{aio\_reqprio} di \param{aiocbp}.
-  \item[\macro{EAGAIN}] La coda delle richieste è momentaneamente piena.
+  \item[\errcode{EAGAIN}] La coda delle richieste è momentaneamente piena.
   \end{errlist}
 }
 \end{functions}
 
 Entrambe le funzioni ritornano immediatamente dopo aver messo in coda la
-richiesta, o in caso di errore. Non è detto che gli errori \macro{EBADF} ed
-\macro{EINVAL} siano rilevati immediatamente al momento della chiamata,
+richiesta, o in caso di errore. Non è detto che gli errori \errcode{EBADF} ed
+\errcode{EINVAL} siano rilevati immediatamente al momento della chiamata,
 potrebbero anche emergere nelle fasi successive delle operazioni. Lettura e
 scrittura avvengono alla posizione indicata da \var{aio\_offset}, a meno che
 il file non sia stato aperto in \textit{append mode} (vedi
@@ -565,17 +565,17 @@ errore; il suo prototipo 
 \end{prototype}
 
 Se l'operazione non si è ancora completata viene restituito l'errore di
-\macro{EINPROGRESS}. La funzione ritorna zero quando l'operazione si è
+\errcode{EINPROGRESS}. La funzione ritorna zero quando l'operazione si è
 conclusa con successo, altrimenti restituisce il codice dell'errore
 verificatosi, ed esegue la corrispondente impostazione di \var{errno}. Il
-codice può essere sia \macro{EINVAL} ed \macro{EBADF}, dovuti ad un valore
+codice può essere sia \errcode{EINVAL} ed \errcode{EBADF}, dovuti ad un valore
 errato per \param{aiocbp}, che uno degli errori possibili durante l'esecuzione
 dell'operazione di I/O richiesta, nel qual caso saranno restituiti, a seconda
 del caso, i codici di errore delle system call \func{read}, \func{write} e
 \func{fsync}.
 
 Una volta che si sia certi che le operazioni siano state concluse (cioè dopo
-che una chiamata ad \func{aio\_error} non ha restituito \macro{EINPROGRESS},
+che una chiamata ad \func{aio\_error} non ha restituito \errcode{EINPROGRESS},
 si potrà usare la seconda funzione dell'interfaccia, \func{aio\_return}, che
 permette di verificare il completamento delle operazioni di I/O asincrono; il
 suo prototipo è:
@@ -614,16 +614,16 @@ Richiede la sincronizzazione dei dati per il file indicato da \param{aiocbp}.
   
 \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
   errore, che può essere, con le stesse modalità di \func{aio\_read},
-  \macro{EAGAIN}, \macro{EBADF} o \macro{EINVAL}.}
+  \const{EAGAIN}, \const{EBADF} o \const{EINVAL}.}
 \end{prototype}
 
 La funzione richiede la sincronizzazione delle operazioni di I/O, ritornando
 immediatamente. L'esecuzione effettiva della sincronizzazione dovrà essere
 verificata con \func{aio\_error} e \func{aio\_return} come per le operazioni
 di lettura e scrittura. L'argomento \param{op} permette di indicare la
-modalità di esecuzione, se si specifica il valore \macro{O\_DSYNC} le
+modalità di esecuzione, se si specifica il valore \const{O\_DSYNC} le
 operazioni saranno completate con una chiamata a \func{fdatasync}, se si
-specifica \macro{O\_SYNC} con una chiamata a \func{fsync} (per i dettagli vedi
+specifica \const{O\_SYNC} con una chiamata a \func{fsync} (per i dettagli vedi
 \secref{sec:file_sync}).
 
 Il successo della chiamata assicura la sincronizzazione delle operazioni fino
@@ -646,13 +646,13 @@ da \param{aiocbp}.
 \bodydesc{La funzione restituisce il risultato dell'operazione con un codice
   di positivo, e -1 in caso di errore, che avviene qualora si sia specificato
   un valore non valido di \param{fildes}, imposta \var{errno} al valore
-  \macro{EBADF}.}
+  \const{EBADF}.}
 \end{prototype}
 
 La funzione permette di cancellare una operazione specifica sul file
-\param{fildes}, o tutte le operazioni pendenti, specificando \macro{NULL} come
+\param{fildes}, o tutte le operazioni pendenti, specificando \val{NULL} come
 valore di \param{aiocbp}.  Quando una operazione viene cancellata una
-successiva chiamata ad \func{aio\_error} riporterà \macro{ECANCELED} come
+successiva chiamata ad \func{aio\_error} riporterà \errcode{ECANCELED} come
 codice di errore, ed il suo codice di ritorno sarà -1, inoltre il meccanismo
 di notifica non verrà invocato. Se si specifica una operazione relativa ad un
 altro file descriptor il risultato è indeterminato.
@@ -660,17 +660,17 @@ altro file descriptor il risultato 
 In caso di successo, i possibili valori di ritorno per \func{aio\_cancel} sono
 tre (anch'essi definiti in \file{aio.h}):
 \begin{basedescript}{\desclabelwidth{3.0cm}}
-\item[\macro{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la
+\item[\const{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la
   cancellazione sono state già completate,
   
-\item[\macro{AIO\_CANCELED}] indica che tutte le operazioni richieste sono
+\item[\const{AIO\_CANCELED}] indica che tutte le operazioni richieste sono
   state cancellate,  
   
-\item[\macro{AIO\_NOTCANCELED}] indica che alcune delle operazioni erano in
+\item[\const{AIO\_NOTCANCELED}] indica che alcune delle operazioni erano in
   corso e non sono state cancellate.
 \end{basedescript}
 
-Nel caso si abbia \macro{AIO\_NOTCANCELED} occorrerà chiamare
+Nel caso si abbia \const{AIO\_NOTCANCELED} occorrerà chiamare
 \func{aio\_error} per determinare quali sono le operazioni effettivamente
 cancellate. Le operazioni che non sono state cancellate proseguiranno il loro
 corso normale, compreso quanto richiesto riguardo al meccanismo di notifica
@@ -691,10 +691,10 @@ specifica operazione; il suo prototipo 
     completate, e -1 in caso di errore nel qual caso \var{errno} assumerà uno
     dei valori:
     \begin{errlist}
-    \item[\macro{EAGAIN}] Nessuna operazione è stata completata entro
+    \item[\errcode{EAGAIN}] Nessuna operazione è stata completata entro
       \param{timeout}.
-    \item[\macro{ENOSYS}] La funzione non è implementata.
-    \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+    \item[\errcode{ENOSYS}] La funzione non è implementata.
+    \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
     \end{errlist}
   }
 \end{prototype}
@@ -707,7 +707,7 @@ segnale.\footnote{si tenga conto che questo segnale pu
 con delle strutture \var{aiocb} relative ad operazioni effettivamente
 richieste, ma può contenere puntatori nulli, che saranno ignorati. In caso si
 siano specificati valori non validi l'effetto è indefinito.  Un valore
-\macro{NULL} per \param{timout} comporta l'assenza di timeout.
+\val{NULL} per \param{timout} comporta l'assenza di timeout.
 
 Lo standard POSIX.1b infine ha previsto pure una funzione, \func{lio\_listio},
 che permette di effettuare la richiesta di una intera lista di operazioni di
@@ -722,10 +722,10 @@ lettura o scrittura; il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EAGAIN}] Nessuna operazione è stata completata entro
+    \item[\errcode{EAGAIN}] Nessuna operazione è stata completata entro
       \param{timeout}.
-    \item[\macro{ENOSYS}] La funzione non è implementata.
-    \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+    \item[\errcode{ENOSYS}] La funzione non è implementata.
+    \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
     \end{errlist}
   }
 \end{prototype}
@@ -736,9 +736,9 @@ lista \param{list}; questa deve contenere gli indirizzi di altrettanti
 dovrà essere specificato il tipo di operazione tramite il campo
 \var{aio\_lio\_opcode}, che può prendere i tre valori:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{LIO\_READ}]  si richiede una operazione di lettura.
-\item[\macro{LIO\_WRITE}] si richiede una operazione di scrittura.
-\item[\macro{LIO\_NOP}] non si effettua nessuna operazione.
+\item[\const{LIO\_READ}]  si richiede una operazione di lettura.
+\item[\const{LIO\_WRITE}] si richiede una operazione di scrittura.
+\item[\const{LIO\_NOP}] non si effettua nessuna operazione.
 \end{basedescript}
 l'ultimo valore viene usato quando si ha a che fare con un vettore di
 dimensione fissa, per poter specificare solo alcune operazioni, o quando si è
@@ -746,9 +746,9 @@ dovuto cancellare delle operazioni e si deve ripetere la richiesta per quelle
 non completate.
 
 L'argomento \param{mode} permette di stabilire il comportamento della
-funzione, se viene specificato il valore \macro{LIO\_WAIT} la funzione si
+funzione, se viene specificato il valore \const{LIO\_WAIT} la funzione si
 blocca fino al completamento di tutte le operazioni richieste; se invece si
-specifica \macro{LIO\_NOWAIT} la funzione ritorna immediatamente dopo aver
+specifica \const{LIO\_NOWAIT} la funzione ritorna immediatamente dopo aver
 messo in coda tutte le richieste. In questo caso il chiamante può richiedere
 la notifica del completamento di tutte le richieste, impostando l'argomento
 \param{sig} in maniera analoga a come si fa per il campo \var{aio\_sigevent}
@@ -790,16 +790,16 @@ prototipi sono:
     caso di successo, e -1 in caso di errore, nel qual caso \var{errno}
     assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EBADF}] si è specificato un file descriptor sbagliato.
-  \item[\macro{EINVAL}] si è specificato un valore non valido per uno degli
-    argomenti (ad esempio \param{count} è maggiore di \macro{MAX\_IOVEC}).
-  \item[\macro{EINTR}] la funzione è stata interrotta da un segnale prima di
+  \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato.
+  \item[\errcode{EINVAL}] si è specificato un valore non valido per uno degli
+    argomenti (ad esempio \param{count} è maggiore di \const{MAX\_IOVEC}).
+  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
     di avere eseguito una qualunque lettura o scrittura.
-  \item[\macro{EAGAIN}] \param{fd} è stato aperto in modalità non bloccante e
+  \item[\errcode{EAGAIN}] \param{fd} è stato aperto in modalità non bloccante e
   non ci sono dati in lettura.
-  \item[\macro{EOPNOTSUPP}] La coda delle richieste è momentaneamente piena.
+  \item[\errcode{EOPNOTSUPP}] La coda delle richieste è momentaneamente piena.
   \end{errlist}
-  ed inoltre \macro{EISDIR}, \macro{ENOMEM}, \macro{EFAULT} (se non sono stato
+  ed inoltre \const{EISDIR}, \const{ENOMEM}, \const{EFAULT} (se non sono stato
   allocati correttamente i buffer specificati nei campi \func{iov\_base}), più
   tutti gli ulteriori errori che potrebbero avere le usuali funzioni di
   lettura e scrittura eseguite su \param{fd}.}
@@ -893,26 +893,26 @@ in memoria di un file; il suo prototipo 
   Esegue la mappatura in memoria del file \param{fd}.
   
   \bodydesc{La funzione restituisce il puntatore alla zona di memoria mappata
-    in caso di successo, e \macro{MAP\_FAILED} (-1) in caso di errore, nel
+    in caso di successo, e \const{MAP\_FAILED} (-1) in caso di errore, nel
     qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EBADF}] Il file descriptor non è valido, e non si è usato
-      \macro{MAP\_ANONYMOUS}.
-    \item[\macro{EACCES}] Il file descriptor non si riferisce ad un file
-      regolare, o si è richiesto \macro{MAP\_PRIVATE} ma \param{fd} non è
-      aperto in lettura, o si è richiesto \macro{MAP\_SHARED} e impostato
-      \macro{PROT\_WRITE} ed \param{fd} non è aperto in lettura/scrittura, o
-      si è impostato \macro{PROT\_WRITE} ed \param{fd} è in
+    \item[\errcode{EBADF}] Il file descriptor non è valido, e non si è usato
+      \const{MAP\_ANONYMOUS}.
+    \item[\errcode{EACCES}] Il file descriptor non si riferisce ad un file
+      regolare, o si è richiesto \const{MAP\_PRIVATE} ma \param{fd} non è
+      aperto in lettura, o si è richiesto \const{MAP\_SHARED} e impostato
+      \const{PROT\_WRITE} ed \param{fd} non è aperto in lettura/scrittura, o
+      si è impostato \const{PROT\_WRITE} ed \param{fd} è in
       \textit{append-only}.
-    \item[\macro{EINVAL}] I valori di \param{start}, \param{length} o
+    \item[\errcode{EINVAL}] I valori di \param{start}, \param{length} o
       \param{offset} non sono validi (o troppo grandi o non allineati sulla
       dimensione delle pagine).
-    \item[\macro{ETXTBSY}] Si è impostato \macro{MAP\_DENYWRITE} ma \param{fd}
+    \item[\errcode{ETXTBSY}] Si è impostato \const{MAP\_DENYWRITE} ma \param{fd}
       è aperto in scrittura.
-    \item[\macro{EAGAIN}] Il file è bloccato, o si è bloccata troppa memoria.
-    \item[\macro{ENOMEM}] Non c'è memoria o si è superato il limite sul numero
+    \item[\errcode{EAGAIN}] Il file è bloccato, o si è bloccata troppa memoria.
+    \item[\errcode{ENOMEM}] Non c'è memoria o si è superato il limite sul numero
       di mappature possibili.
-    \item[\macro{ENODEV}] Il filesystem di \param{fd} non supporta il memory
+    \item[\errcode{ENODEV}] Il filesystem di \param{fd} non supporta il memory
       mapping.
     \end{errlist}
   }
@@ -932,10 +932,10 @@ multiplo della dimensione di una pagina di memoria.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{PROT\_EXEC}  & Le pagine possono essere eseguite.\\
-    \macro{PROT\_READ}  & Le pagine possono essere lette.\\
-    \macro{PROT\_WRITE} & Le pagine possono essere scritte.\\
-    \macro{PROT\_NONE}  & L'accesso alle pagine è vietato.\\
+    \const{PROT\_EXEC}  & Le pagine possono essere eseguite.\\
+    \const{PROT\_READ}  & Le pagine possono essere lette.\\
+    \const{PROT\_WRITE} & Le pagine possono essere scritte.\\
+    \const{PROT\_NONE}  & L'accesso alle pagine è vietato.\\
     \hline    
   \end{tabular}
   \caption{Valori dell'argomento \param{prot} di \func{mmap}, relativi alla
@@ -951,7 +951,7 @@ Il valore dell'argomento \param{prot} indica la protezione\footnote{in Linux
   sulle pagine di memoria reale, ed le modalità di accesso (lettura,
   esecuzione, scrittura); una loro violazione causa quella che si chiama una
   \textit{segment violation}, e la relativa emissione del segnale
-  \macro{SIGSEGV}.} da applicare al segmento di memoria e deve essere
+  \const{SIGSEGV}.} da applicare al segmento di memoria e deve essere
 specificato come maschera binaria ottenuta dall'OR di uno o più dei valori
 riportati in \tabref{tab:file_mmap_flag}; il valore specificato deve essere
 compatibile con la modalità di accesso con cui si è aperto il file.
@@ -971,20 +971,20 @@ come maschera binaria ottenuta dall'OR di uno o pi
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{MAP\_FIXED}     & Non permette di restituire un indirizzo diverso
+    \const{MAP\_FIXED}     & Non permette di restituire un indirizzo diverso
                              da \param{start}, se questo non può essere usato
                              \func{mmap} fallisce. Se si imposta questo flag il
                              valore di \param{start} deve essere allineato
                              alle dimensioni di una pagina. \\
-    \macro{MAP\_SHARED}    & I cambiamenti sulla memoria mappata vengono
+    \const{MAP\_SHARED}    & I cambiamenti sulla memoria mappata vengono
                              riportati sul file e saranno immediatamente
                              visibili agli altri processi che mappano lo stesso
                              file.\footnotemark Il file su disco però non sarà
                              aggiornato fino alla chiamata di \func{msync} o
                              \func{unmap}), e solo allora le modifiche saranno
                              visibili per l'I/O convenzionale. Incompatibile
-                             con \macro{MAP\_PRIVATE}. \\ 
-    \macro{MAP\_PRIVATE}   & I cambiamenti sulla memoria mappata non vengono
+                             con \const{MAP\_PRIVATE}. \\ 
+    \const{MAP\_PRIVATE}   & I cambiamenti sulla memoria mappata non vengono
                              riportati sul file. Ne viene fatta una copia
                              privata cui solo il processo chiamante ha
                              accesso.  Le modifiche sono mantenute attraverso
@@ -993,30 +993,30 @@ come maschera binaria ottenuta dall'OR di uno o pi
                              salvate su swap in caso di necessità. Non è
                              specificato se i cambiamenti sul file originale
                              vengano riportati sulla regione
-                             mappata. Incompatibile con \macro{MAP\_SHARED}. \\
-    \macro{MAP\_DENYWRITE} & In Linux viene ignorato per evitare
+                             mappata. Incompatibile con \const{MAP\_SHARED}. \\
+    \const{MAP\_DENYWRITE} & In Linux viene ignorato per evitare
                              \textit{DoS}\index{DoS} (veniva usato per
                              segnalare che tentativi di scrittura sul file
-                             dovevano fallire con \macro{ETXTBUSY}).\\
-    \macro{MAP\_EXECUTABLE}& Ignorato. \\
-    \macro{MAP\_NORESERVE} & Si usa con \macro{MAP\_PRIVATE}. Non riserva
+                             dovevano fallire con \errcode{ETXTBUSY}).\\
+    \const{MAP\_EXECUTABLE}& Ignorato. \\
+    \const{MAP\_NORESERVE} & Si usa con \const{MAP\_PRIVATE}. Non riserva
                              delle pagine di swap ad uso del meccanismo di
                              \textit{copy on write}\index{copy on write}
                              per mantenere le
                              modifiche fatte alla regione mappata, in
                              questo caso dopo una scrittura, se non c'è più
                              memoria disponibile, si ha l'emissione di
-                             un \macro{SIGSEGV}. \\
-    \macro{MAP\_LOCKED}    & Se impostato impedisce lo swapping delle pagine
+                             un \const{SIGSEGV}. \\
+    \const{MAP\_LOCKED}    & Se impostato impedisce lo swapping delle pagine
                              mappate. \\
-    \macro{MAP\_GROWSDOWN} & Usato per gli stack. Indica 
+    \const{MAP\_GROWSDOWN} & Usato per gli stack. Indica 
                              che la mappatura deve essere effettuata con gli
                              indirizzi crescenti verso il basso.\\
-    \macro{MAP\_ANONYMOUS} & La mappatura non è associata a nessun file. Gli
+    \const{MAP\_ANONYMOUS} & La mappatura non è associata a nessun file. Gli
                              argomenti \param{fd} e \param{offset} sono
                              ignorati.\footnotemark\\
-    \macro{MAP\_ANON}      & Sinonimo di \macro{MAP\_ANONYMOUS}, deprecato.\\
-    \macro{MAP\_FILE}      & Valore di compatibilità, deprecato.\\
+    \const{MAP\_ANON}      & Sinonimo di \const{MAP\_ANONYMOUS}, deprecato.\\
+    \const{MAP\_FILE}      & Valore di compatibilità, deprecato.\\
     \hline
   \end{tabular}
   \caption{Valori possibili dell'argomento \param{flag} di \func{mmap}.}
@@ -1025,7 +1025,7 @@ come maschera binaria ottenuta dall'OR di uno o pi
 
 \footnotetext{Dato che tutti faranno riferimento alle stesse pagine di
   memoria.}  
-\footnotetext{L'uso di questo flag con \macro{MAP\_SHARED} è
+\footnotetext{L'uso di questo flag con \const{MAP\_SHARED} è
   stato implementato in Linux a partire dai kernel della serie 2.4.x.}
 
 Gli effetti dell'accesso ad una zona di memoria mappata su file possono essere
@@ -1033,7 +1033,7 @@ piuttosto complessi, essi si possono comprendere solo tenendo presente che
 tutto quanto è comunque basato sul basato sul meccanismo della memoria
 virtuale. Questo comporta allora una serie di conseguenze. La più ovvia è che
 se si cerca di scrivere su una zona mappata in sola lettura si avrà
-l'emissione di un segnale di violazione di accesso (\macro{SIGSEGV}), dato che
+l'emissione di un segnale di violazione di accesso (\const{SIGSEGV}), dato che
 i permessi sul segmento di memoria relativo non consentono questo tipo di
 accesso.
 
@@ -1059,7 +1059,7 @@ di memoria che si estende fino al bordo della pagina successiva.
 
 
 In questo caso è possibile accedere a quella zona di memoria che eccede le
-dimensioni specificate da \param{lenght}, senza ottenere un \macro{SIGSEGV}
+dimensioni specificate da \param{lenght}, senza ottenere un \const{SIGSEGV}
 poiché essa è presente nello spazio di indirizzi del processo, anche se non è
 mappata sul file. Il comportamento del sistema è quello di restituire un
 valore nullo per quanto viene letto, e di non riportare su file quanto viene
@@ -1081,8 +1081,8 @@ quella della mappatura in memoria.
 In questa situazione, per la sezione di pagina parzialmente coperta dal
 contenuto del file, vale esattamente quanto visto in precedenza; invece per la
 parte che eccede, fino alle dimensioni date da \param{length}, l'accesso non
-sarà più possibile, ma il segnale emesso non sarà \macro{SIGSEGV}, ma
-\macro{SIGBUS}, come illustrato in \figref{fig:file_mmap_exceed}.
+sarà più possibile, ma il segnale emesso non sarà \const{SIGSEGV}, ma
+\const{SIGBUS}, come illustrato in \figref{fig:file_mmap_exceed}.
 
 Non tutti i file possono venire mappati in memoria, dato che, come illustrato
 in \figref{fig:file_mmap_layout}, la mappatura introduce una corrispondenza
@@ -1098,8 +1098,8 @@ che sono utilizzabili solo con questa interfaccia.
 Dato che passando attraverso una \func{fork} lo spazio di indirizzi viene
 copiato integralmente, i file mappati in memoria verranno ereditati in maniera
 trasparente dal processo figlio, mantenendo gli stessi attributi avuti nel
-padre; così se si è usato \macro{MAP\_SHARED} padre e figlio accederanno allo
-stesso file in maniera condivisa, mentre se si è usato \macro{MAP\_PRIVATE}
+padre; così se si è usato \const{MAP\_SHARED} padre e figlio accederanno allo
+stesso file in maniera condivisa, mentre se si è usato \const{MAP\_PRIVATE}
 ciascuno di essi manterrà una sua versione privata indipendente. Non c'è
 invece nessun passaggio attraverso una \func{exec}, dato che quest'ultima
 sostituisce tutto lo spazio degli indirizzi di un processo con quello di un
@@ -1112,7 +1112,7 @@ dal momento in cui la mappatura 
 una pagina mappata su un file aggiorna questo tempo.  I valori di
 \var{st\_ctime} e \var{st\_mtime} possono venir cambiati solo quando si è
 consentita la scrittura sul file (cioè per un file mappato con
-\macro{PROT\_WRITE} e \macro{MAP\_SHARED}) e sono aggiornati dopo la scrittura
+\const{PROT\_WRITE} e \const{MAP\_SHARED}) e sono aggiornati dopo la scrittura
 o in corrispondenza di una eventuale \func{msync}.
 
 Dato per i file mappati in memoria le operazioni di I/O sono gestite
@@ -1146,9 +1146,9 @@ contenuto della memoria mappata con il file su disco; il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] O \param{start} non è multiplo di \macro{PAGESIZE},
+    \item[\errcode{EINVAL}] O \param{start} non è multiplo di \const{PAGESIZE},
     o si è specificato un valore non valido per \param{flags}.
-    \item[\macro{EFAULT}] L'intervallo specificato non ricade in una zona
+    \item[\errcode{EFAULT}] L'intervallo specificato non ricade in una zona
       precedentemente mappata.
     \end{errlist}
   }
@@ -1169,9 +1169,9 @@ del file aggiornato.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{MS\_ASYNC}     & Richiede la sincronizzazione.\\
-    \macro{MS\_SYNC}      & Attende che la sincronizzazione si eseguita.\\
-    \macro{MS\_INVALIDATE}& Richiede che le altre mappature dello stesso file
+    \const{MS\_ASYNC}     & Richiede la sincronizzazione.\\
+    \const{MS\_SYNC}      & Attende che la sincronizzazione si eseguita.\\
+    \const{MS\_INVALIDATE}& Richiede che le altre mappature dello stesso file
                             siano invalidate.\\
     \hline    
   \end{tabular}
@@ -1181,7 +1181,7 @@ del file aggiornato.
 
 L'argomento \param{flag} è specificato come maschera binaria composta da un OR
 dei valori riportati in \tabref{tab:file_mmap_rsync}, di questi però
-\macro{MS\_ASYNC} e \macro{MS\_SYNC} sono incompatibili; con il primo valore
+\const{MS\_ASYNC} e \const{MS\_SYNC} sono incompatibili; con il primo valore
 infatti la funzione si limita ad inoltrare la richiesta di sincronizzazione al
 meccanismo della memoria virtuale, ritornando subito, mentre con il secondo
 attende che la sincronizzazione sia stata effettivamente eseguita. Il terzo
@@ -1202,7 +1202,7 @@ mappatura della memoria usando la funzione \func{munmap}, il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] L'intervallo specificato non ricade in una zona
+    \item[\errcode{EINVAL}] L'intervallo specificato non ricade in una zona
       precedentemente mappata.
     \end{errlist}
   }
@@ -1341,8 +1341,8 @@ rimuovere un \textit{file lock} 
   \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{EWOULDBLOCK}] Il file ha già un blocco attivo, e si è
-      specificato \macro{LOCK\_NB}.
+    \item[\errcode{EWOULDBLOCK}] Il file ha già un blocco attivo, e si è
+      specificato \const{LOCK\_NB}.
     \end{errlist}
   }
 \end{prototype}
@@ -1361,10 +1361,10 @@ essere passato utilizzando le costanti riportate in
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{LOCK\_SH} & Asserisce uno \textit{shared lock} sul file.\\ 
-    \macro{LOCK\_EX} & Asserisce un \textit{esclusive lock} sul file.\\
-    \macro{LOCK\_UN} & Rilascia il \textit{file lock}.\\
-    \macro{LOCK\_NB} & Impedisce che la funzione si blocchi nella
+    \const{LOCK\_SH} & Asserisce uno \textit{shared lock} sul file.\\ 
+    \const{LOCK\_EX} & Asserisce un \textit{esclusive lock} sul file.\\
+    \const{LOCK\_UN} & Rilascia il \textit{file lock}.\\
+    \const{LOCK\_NB} & Impedisce che la funzione si blocchi nella
                        richiesta di un \textit{file lock}.\\
     \hline    
   \end{tabular}
@@ -1372,12 +1372,12 @@ essere passato utilizzando le costanti riportate in
   \label{tab:file_flock_operation}
 \end{table}
 
-I primi due valori, \macro{LOCK\_SH} e \macro{LOCK\_EX} permettono di
+I primi due valori, \const{LOCK\_SH} e \const{LOCK\_EX} permettono di
 richiedere un \textit{file lock}, ed ovviamente devono essere usati in maniera
-alternativa. Se si specifica anche \macro{LOCK\_NB} la funzione non si
+alternativa. Se si specifica anche \const{LOCK\_NB} la funzione non si
 bloccherà qualora il lock non possa essere acquisito, ma ritornerà subito con
-un errore di \macro{EWOULDBLOCK}. Per rilasciare un lock si dovrà invece usare
-\macro{LOCK\_UN}.
+un errore di \errcode{EWOULDBLOCK}. Per rilasciare un lock si dovrà invece
+usare \const{LOCK\_UN}.
 
 La semantica del file locking di BSD è diversa da quella del file locking
 POSIX, in particolare per quanto riguarda il comportamento dei lock nei
@@ -1397,7 +1397,7 @@ mantenute a livello di inode,\footnote{in particolare, come accennato in
   \var{i\_flock} della struttura \var{inode} (per le definizioni esatte si
   faccia riferimento al file \file{fs.h} nei sorgenti del kernel).  Un bit del
   campo \var{fl\_flags} di specifica se si tratta di un lock in semantica BSD
-  (\macro{FL\_FLOCK}) o POSIX (\macro{FL\_POSIX}).} dato che questo è l'unico
+  (\const{FL\_FLOCK}) o POSIX (\const{FL\_POSIX}).} dato che questo è l'unico
 riferimento in comune che possono avere due processi diversi che aprono lo
 stesso file.
 
@@ -1473,20 +1473,20 @@ essa viene usata solo secondo il 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}] L'operazione è proibita per la presenza di
+    \item[\errcode{EACCES}] L'operazione è proibita per la presenza di
       \textit{file lock} da parte di altri processi.
-    \item[\macro{ENOLCK}] Il sistema non ha le risorse per il locking: ci sono
-      troppi segmenti di lock aperti, si è esaurita la tabella dei lock, o il
-      protocollo per il locking remoto è fallito.
-    \item[\macro{EDEADLK}] Si è richiesto un lock su una regione bloccata da
+    \item[\errcode{ENOLCK}] Il sistema non ha le risorse per il locking: ci
+      sono troppi segmenti di lock aperti, si è esaurita la tabella dei lock,
+      o il protocollo per il locking remoto è fallito.
+    \item[\errcode{EDEADLK}] Si è richiesto un lock su una regione bloccata da
       un altro processo che è a sua volta in attesa dello sblocco di un lock
       mantenuto dal processo corrente; si avrebbe pertanto un
       \textit{deadlock}. Non è garantito che il sistema riconosca sempre
       questa situazione.
-    \item[\macro{EINTR}] La funzione è stata interrotta da un segnale prima di
-      poter acquisire un lock.
+    \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale prima
+      di poter acquisire un lock.
     \end{errlist}
-    ed inoltre \macro{EBADF}, \macro{EFAULT}.
+    ed inoltre \const{EBADF}, \const{EFAULT}.
   }
 \end{prototype}
 
@@ -1527,7 +1527,7 @@ il lock: \var{l\_start} specifica il byte di partenza, \var{l\_len} la
 lunghezza della sezione e infine \var{l\_whence} imposta il riferimento da cui
 contare \var{l\_start}. Il valore di \var{l\_whence} segue la stessa semantica
 dell'omonimo argomento di \func{lseek}, coi tre possibili valori
-\macro{SEEK\_SET}, \macro{SEEK\_CUR} e \macro{SEEK\_END}, (si vedano le
+\const{SEEK\_SET}, \const{SEEK\_CUR} e \const{SEEK\_END}, (si vedano le
 relative descrizioni in \secref{sec:file_lseek}). 
 
 Si tenga presente che un lock può essere richiesto anche per una regione al di
@@ -1543,7 +1543,7 @@ pu
 \tabref{tab:file_flock_type}, che permettono di richiedere rispettivamente uno
 \textit{shared lock}, un \textit{esclusive lock}, e la rimozione di un lock
 precedentemente acquisito. Infine il campo \var{l\_pid} viene usato solo in
-caso di lettura, quando si chiama \func{fcntl} con \macro{F\_GETLK}, e riporta
+caso di lettura, quando si chiama \func{fcntl} con \const{F\_GETLK}, e riporta
 il \acr{pid} del processo che detiene il lock.
 
 \begin{table}[htb]
@@ -1554,9 +1554,9 @@ il \acr{pid} del processo che detiene il lock.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{F\_RDLCK} & Richiede un blocco condiviso (\textit{read lock}).\\
-    \macro{F\_WRLCK} & Richiede un blocco esclusivo (\textit{write lock}).\\
-    \macro{F\_UNLCK} & Richiede l'eliminazione di un file lock.\\
+    \const{F\_RDLCK} & Richiede un blocco condiviso (\textit{read lock}).\\
+    \const{F\_WRLCK} & Richiede un blocco esclusivo (\textit{write lock}).\\
+    \const{F\_UNLCK} & Richiede l'eliminazione di un file lock.\\
     \hline    
   \end{tabular}
   \caption{Valori possibili per il campo \var{l\_type} di \func{flock}.}
@@ -1568,43 +1568,43 @@ effettivamente svolta dalla funzione 
 \param{cmd} che, come già riportato in \secref{sec:file_fcntl}, specifica
 l'azione da compiere; i valori relativi al file locking sono tre:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{F\_GETLK}] verifica se il file lock specificato dalla struttura
+\item[\const{F\_GETLK}] verifica se il file lock specificato dalla struttura
   puntata da \param{lock} può essere acquisito: in caso negativo sovrascrive
   la struttura \param{flock} con i valori relativi al lock già esistente che
   ne blocca l'acquisizione, altrimenti si limita a impostarne il campo
-  \var{l\_type} con il valore \macro{F\_UNLCK}. 
-\item[\macro{F\_SETLK}] se il campo \var{l\_type} della struttura puntata da
-  \param{lock} è \macro{F\_RDLCK} o \macro{F\_WRLCK} richiede il
-  corrispondente file lock, se è \macro{F\_UNLCK} lo rilascia. Nel caso la
+  \var{l\_type} con il valore \const{F\_UNLCK}. 
+\item[\const{F\_SETLK}] se il campo \var{l\_type} della struttura puntata da
+  \param{lock} è \const{F\_RDLCK} o \const{F\_WRLCK} richiede il
+  corrispondente file lock, se è \const{F\_UNLCK} lo rilascia. Nel caso la
   richiesta non possa essere soddisfatta a causa di un lock preesistente la
-  funzione ritorna immediatamente con un errore di \macro{EACCES} o di
-  \macro{EAGAIN}.
-\item[\macro{F\_SETLKW}] è identica a \macro{F\_SETLK}, ma se la richiesta di
+  funzione ritorna immediatamente con un errore di \errcode{EACCES} o di
+  \errcode{EAGAIN}.
+\item[\const{F\_SETLKW}] è identica a \const{F\_SETLK}, ma se la richiesta di
   non può essere soddisfatta per la presenza di un altro lock, mette il
   processo in stato di attesa fintanto che il lock precedente non viene
   rilasciato. Se l'attesa viene interrotta da un segnale la funzione ritorna
-  con un errore di \macro{EINTR}.
+  con un errore di \errcode{EINTR}.
 \end{basedescript}
 
-Si noti che per quanto detto il comando \macro{F\_GETLK} non serve a rilevare
+Si noti che per quanto detto il comando \const{F\_GETLK} non serve a rilevare
 una presenza generica di lock su un file, perché se ne esistono altri
 compatibili con quello richiesto, la funzione ritorna comunque impostando
-\var{l\_type} a \macro{F\_UNLCK}.  Inoltre a seconda del valore di
+\var{l\_type} a \const{F\_UNLCK}.  Inoltre a seconda del valore di
 \var{l\_type} si potrà controllare o l'esistenza di un qualunque tipo di lock
-(se è \macro{F\_WRLCK}) o di write lock (se è \macro{F\_RDLCK}). Si consideri
+(se è \const{F\_WRLCK}) o di write lock (se è \const{F\_RDLCK}). Si consideri
 poi che può esserci più di un lock che impedisce l'acquisizione di quello
 richiesto (basta che le regioni si sovrappongano), ma la funzione ne riporterà
-sempre soltanto uno, impostando \var{l\_whence} a \macro{SEEK\_SET} ed i
+sempre soltanto uno, impostando \var{l\_whence} a \const{SEEK\_SET} ed i
 valori \var{l\_start} e \var{l\_len} per indicare quale è la regione bloccata.
 
 Infine si tenga presente che effettuare un controllo con il comando
-\macro{F\_GETLK} e poi tentare l'acquisizione con \macro{F\_SETLK} non è una
+\const{F\_GETLK} e poi tentare l'acquisizione con \const{F\_SETLK} non è una
 operazione atomica (un altro processo potrebbe acquisire un lock fra le due
 chiamate) per cui si deve sempre verificare il codice di ritorno di
 \func{fcntl}\footnote{controllare il codice di ritorno delle funzioni invocate
   è comunque una buona norma di programmazione, che permette di evitare un
   sacco di errori difficili da tracciare proprio perché non vengono rilevati.}
-quando la si invoca con \macro{F\_SETLK}, per controllare che il lock sia
+quando la si invoca con \const{F\_SETLK}, per controllare che il lock sia
 stato effettivamente acquisito.
 
 \begin{figure}[htb]
@@ -1624,7 +1624,7 @@ volta di ottenere un lock sulla regione A? Questa 
 porta ad un \textit{deadlock}\index{deadlock}, dato che a quel punto anche il
 processo 2 si bloccherebbe, e niente potrebbe sbloccare l'altro processo. Per
 questo motivo il kernel si incarica di rilevare situazioni di questo tipo, ed
-impedirle restituendo un errore di \macro{EDEADLK} alla funzione che cerca di
+impedirle restituendo un errore di \errcode{EDEADLK} alla funzione che cerca di
 acquisire un lock che porterebbe ad un \textit{deadlock}.
 
 \begin{figure}[!bht]
@@ -1646,7 +1646,7 @@ esso 
   \var{fl\_pid}, la sezione di file che viene bloccata grazie ai campi
   \var{fl\_start} e \var{fl\_end}.  La struttura è comunque la stessa, solo
   che in questo caso nel campo \var{fl\_flags} è impostato il bit
-  \macro{FL\_POSIX} ed il campo \var{fl\_file} non viene usato.} il lock è
+  \const{FL\_POSIX} ed il campo \var{fl\_file} non viene usato.} il lock è
 sempre associato all'inode, solo che in questo caso la titolarità non viene
 identificata con il riferimento ad una voce nella file table, ma con il valore
 del \acr{pid} del processo.
@@ -1654,7 +1654,7 @@ del \acr{pid} del processo.
 Quando si richiede un lock il kernel effettua una scansione di tutti i lock
 presenti sul file\footnote{scandisce cioè la linked list delle strutture
   \var{file\_lock}, scartando automaticamente quelle per cui \var{fl\_flags}
-  non è \macro{FL\_POSIX}, così che le due interfacce restano ben separate.}
+  non è \const{FL\_POSIX}, così che le due interfacce restano ben separate.}
 per verificare se la regione richiesta non si sovrappone ad una già bloccata,
 in caso affermativo decide in base al tipo di lock, in caso negativo il nuovo
 lock viene comunque acquisito ed aggiunto alla lista.
@@ -1795,7 +1795,7 @@ uscendo (\texttt{\small 20--23}) in caso di errore. A questo punto il
 comportamento dipende dalla semantica scelta; nel caso sia BSD occorre
 reimpostare il valore di \var{cmd} per l'uso con \func{flock}; infatti il
 valore preimpostato fa riferimento alla semantica POSIX e vale rispettivamente
-\macro{F\_SETLKW} o \macro{F\_SETLK} a seconda che si sia impostato o meno la
+\const{F\_SETLKW} o \const{F\_SETLK} a seconda che si sia impostato o meno la
 modalità bloccante.
 
 Nel caso si sia scelta la semantica BSD (\texttt{\small 25--34}) prima si
@@ -1973,13 +1973,13 @@ che utilizza la funzione \func{lockf}, 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{EWOULDBLOCK}] Non è possibile acquisire il lock, e si è
-      selezionato \macro{LOCK\_NB}, oppure l'operazione è proibita perché il
+    \item[\errcode{EWOULDBLOCK}] Non è possibile acquisire il lock, e si è
+      selezionato \const{LOCK\_NB}, oppure l'operazione è proibita perché il
       file è mappato in memoria.
-    \item[\macro{ENOLCK}] Il sistema non ha le risorse per il locking: ci sono
-      troppi segmenti di lock aperti, si è esaurita la tabella dei lock.
+    \item[\errcode{ENOLCK}] Il sistema non ha le risorse per il locking: ci
+      sono troppi segmenti di lock aperti, si è esaurita la tabella dei lock.
     \end{errlist}
-    ed inoltre \macro{EBADF}, \macro{EINVAL}.
+    ed inoltre \const{EBADF}, \const{EINVAL}.
   }
 \end{prototype}
 
@@ -1995,12 +1995,12 @@ che specifica quale azione eseguire; i valori possibili sono riportati in
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{LOCK\_SH}& Richiede uno \textit{shared lock}. Più processi possono
+    \const{LOCK\_SH}& Richiede uno \textit{shared lock}. Più processi possono
                       mantenere un lock condiviso sullo stesso file.\\
-    \macro{LOCK\_EX}& Richiede un \textit{exclusive lock}. Un solo processo
+    \const{LOCK\_EX}& Richiede un \textit{exclusive lock}. Un solo processo
                       alla volta può mantenere un lock esclusivo su un file. \\
-    \macro{LOCK\_UN}& Sblocca il file.\\
-    \macro{LOCK\_NB}& Non blocca la funzione quando il lock non è disponibile,
+    \const{LOCK\_UN}& Sblocca il file.\\
+    \const{LOCK\_NB}& Non blocca la funzione quando il lock non è disponibile,
                       si specifica sempre insieme ad una delle altre operazioni
                       con un OR aritmetico dei valori.\\ 
     \hline    
@@ -2010,7 +2010,7 @@ che specifica quale azione eseguire; i valori possibili sono riportati in
 \end{table}
 
 Qualora il lock non possa essere acquisito, a meno di non aver specificato
-\macro{LOCK\_NB}, la funzione si blocca fino alla disponibilità dello stesso.
+\const{LOCK\_NB}, la funzione si blocca fino alla disponibilità dello stesso.
 Dato che la funzione è implementata utilizzando \func{fcntl} la semantica
 delle operazioni è la stessa di quest'ultima (pertanto la funzione non è
 affatto equivalente a \func{flock}).
@@ -2069,29 +2069,29 @@ locking.
 
 Questo significa che in caso di read lock la lettura dal file potrà avvenire
 normalmente con \func{read}, mentre una \func{write} si bloccherà fino al
-rilascio del lock, a meno di non aver aperto il file con \macro{O\_NONBLOCK},
-nel qual caso essa ritornerà immediatamente con un errore di \macro{EAGAIN}.
+rilascio del lock, a meno di non aver aperto il file con \const{O\_NONBLOCK},
+nel qual caso essa ritornerà immediatamente con un errore di \errcode{EAGAIN}.
 
 Se invece si è acquisito un write lock tutti i tentativi di leggere o scrivere
 sulla regione del file bloccata fermeranno il processo fino al rilascio del
-lock, a meno che il file non sia stato aperto con \macro{O\_NONBLOCK}, nel
+lock, a meno che il file non sia stato aperto con \const{O\_NONBLOCK}, nel
 qual caso di nuovo si otterrà un ritorno immediato con l'errore di
-\macro{EAGAIN}.
+\errcode{EAGAIN}.
 
 Infine occorre ricordare che le funzioni di lettura e scrittura non sono le
 sole ad operare sui contenuti di un file, e che sia \func{creat} che
-\func{open} (quando chiamata con \macro{O\_TRUNC}) effettuano dei cambiamenti,
+\func{open} (quando chiamata con \const{O\_TRUNC}) effettuano dei cambiamenti,
 così come \func{truncate}, riducendone le dimensioni (a zero nei primi due
 casi, a quanto specificato nel secondo). Queste operazioni sono assimilate a
 degli accessi in scrittura e pertanto non potranno essere eseguite (fallendo
-con un errore di \macro{EAGAIN}) su un file su cui sia presente un qualunque
+con un errore di \errcode{EAGAIN}) su un file su cui sia presente un qualunque
 lock (le prime due sempre, la terza solo nel caso che la riduzione delle
 dimensioni del file vada a sovrapporsi ad una regione bloccata).
 
 L'ultimo aspetto della interazione del \textit{mandatory locking} con le
 funzioni di accesso ai file è quello relativo ai file mappati in memoria (che
 abbiamo trattato in \secref{sec:file_memory_map}); anche in tal caso infatti,
-quando si esegue la mappatura con l'opzione \macro{MAP\_SHARED}, si ha un
+quando si esegue la mappatura con l'opzione \const{MAP\_SHARED}, si ha un
 accesso al contenuto del file. Lo standard SVID prevede che sia impossibile
 eseguire il memory mapping di un file su cui sono presenti dei
 lock\footnote{alcuni sistemi, come HP-UX, sono ancora più restrittivi e lo
@@ -2101,8 +2101,8 @@ lock\footnote{alcuni sistemi, come HP-UX, sono ancora pi
 implementativa\footnote{per i dettagli si possono leggere le note relative
   all'implementazione, mantenute insime ai sorgenti del kernel nel file
   \file{Documentation/mandatory.txt}.}  di seguire questo comportamento
-soltanto quando si chiama \func{mmap} con l'opzione \macro{MAP\_SHARED} (nel
-qual caso la funzione fallisce con il solito \macro{EAGAIN}) che comporta la
+soltanto quando si chiama \func{mmap} con l'opzione \const{MAP\_SHARED} (nel
+qual caso la funzione fallisce con il solito \errcode{EAGAIN}) che comporta la
 possibilità di modificare il file.
 
 
index 7ba42651e4861ca0bbfb06fc6420444e6fc2134a..1e99a2842772d3abc973a0bd5c3696b495efe8f5 100644 (file)
@@ -73,19 +73,19 @@ principali, come risultano dalla pagina di manuale, sono le seguenti:
     caso di errore. La variabile \var{errno} viene impostata
     opportunamente, i principali codici di errore sono:
   \begin{errlist}
-  \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo
+  \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo
     stesso filesystem.
-  \item[\macro{EPERM}] il filesystem che contiene \var{oldpath} e
-    \macro{newpath} non supporta i link diretti o è una directory.
-  \item[\macro{EEXIST}] un file (o una directory) con quel nome esiste di
+  \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
+    \param{newpath} non supporta i link diretti o è una directory.
+  \item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di
     già.
-  \item[\macro{EMLINK}] ci sono troppi link al file \var{oldpath} (il
-    numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
+  \item[\errcode{EMLINK}] ci sono troppi link al file \param{oldpath} (il
+    numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi
     \secref{sec:sys_limits}).
   \end{errlist}
-  ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR},
-  \macro{EFAULT}, \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP},
-  \macro{ENOSPC}, \macro{EIO}.}
+  ed inoltre \const{EACCES}, \const{ENAMETOOLONG}, \const{ENOTDIR},
+  \const{EFAULT}, \const{ENOMEM}, \const{EROFS}, \const{ELOOP},
+  \const{ENOSPC}, \const{EIO}.}
 \end{prototype}
 
 La creazione di un nuovo collegamento diretto non copia il contenuto del file,
@@ -115,7 +115,7 @@ Data la pericolosit
 simbolici che possono fornire la stessa funzionalità senza questi problemi,
 nei filesystem usati in Linux questa caratteristica è stata completamente
 disabilitata, e al tentativo di creare un link diretto ad una directory la
-funzione restituisce l'errore \macro{EPERM}.
+funzione restituisce l'errore \errcode{EPERM}.
 
 La rimozione di un file (o più precisamente della voce che lo referenzia
 all'interno di una directory) si effettua con la funzione \func{unlink}; il
@@ -131,17 +131,17 @@ suo prototipo 
     errore, nel qual caso il file non viene toccato. La variabile
     \var{errno} viene impostata secondo i seguenti codici di errore:
   \begin{errlist}
-  \item[\macro{EISDIR}] \var{pathname} si riferisce ad una directory
+  \item[\errcode{EISDIR}] \var{pathname} si riferisce ad una directory
     (valore specifico ritornato da Linux che non consente l'uso di
     \var{unlink} con le directory, e non conforme allo standard POSIX, che
-    prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia
+    prescrive invece l'uso di \errcode{EPERM} in caso l'operazione non sia
     consentita o il processo non abbia privilegi sufficienti).
-  \item[\macro{EROFS}] \var{pathname} è su un filesystem montato in sola
+  \item[\errcode{EROFS}] \var{pathname} è su un filesystem montato in sola
   lettura.
-  \item[\macro{EISDIR}] \var{pathname} fa riferimento a una directory.
+  \item[\errcode{EISDIR}] \var{pathname} fa riferimento a una directory.
   \end{errlist}
-  ed inoltre: \macro{EACCES}, \macro{EFAULT}, \macro{ENOENT}, \macro{ENOTDIR},
-  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}.}
+  ed inoltre: \const{EACCES}, \const{EFAULT}, \const{ENOENT}, \const{ENOTDIR},
+  \const{ENOMEM}, \const{EROFS}, \const{ELOOP}, \const{EIO}.}
 \end{prototype}
 
 Per cancellare una voce in una directory è necessario avere il permesso di
@@ -210,37 +210,37 @@ 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[\macro{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non
+  \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non
     è una directory.
-  \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso
+  \item[\errcode{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso
     filesystem.
-  \item[\macro{ENOTEMPTY}] \var{newpath} è una directory già esistente e non
+  \item[\errcode{ENOTEMPTY}] \var{newpath} è una directory già esistente e non
     vuota.
-  \item[\macro{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte di
-    qualche processo (come directory di lavoro o come radice) o del sistema
+  \item[\errcode{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte
+    di qualche processo (come directory di lavoro o come radice) o del sistema
     (come mount point).
-  \item[\macro{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o
+  \item[\errcode{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o
     più in generale si è cercato di creare una directory come sottodirectory
     di se stessa.
-  \item[\macro{ENOTDIR}] Uno dei componenti dei pathname non è una directory o
-    \var{oldpath} è una directory e \var{newpath} esiste e non è una
+  \item[\errcode{ENOTDIR}] Uno dei componenti dei pathname non è una directory
+    \var{oldpath} è una directory e \var{newpath} esiste e non è una
     directory.
   \end{errlist} 
-  ed inoltre \macro{EACCESS}, \macro{EPERM}, \macro{EMLINK}, \macro{ENOENT},
-  \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}.}
+  ed inoltre \const{EACCESS}, \const{EPERM}, \const{EMLINK}, \const{ENOENT},
+  \const{ENOMEM}, \const{EROFS}, \const{ELOOP} e \const{ENOSPC}.}
 \end{prototype}
 
 Il comportamento della funzione è diverso a seconda che si voglia rinominare
 un file o una directory; se ci riferisce a un file allora \var{newpath}, se
 esiste, non deve essere una directory (altrimenti si ha l'errore
-\macro{EISDIR}). Nel caso \var{newpath} indichi un file esistente questo viene
-cancellato e rimpiazzato (atomicamente).
+\errcode{EISDIR}). Nel caso \var{newpath} indichi un file esistente questo
+viene cancellato e rimpiazzato (atomicamente).
 
 Se \var{oldpath} è una directory allora \var{newpath}, se esiste, deve essere
-una directory vuota, altrimenti si avranno gli errori \macro{ENOTDIR} (se non
-è una directory) o \macro{ENOTEMPTY} (se non è vuota). Chiaramente
+una directory vuota, altrimenti si avranno gli errori \errcode{ENOTDIR} (se
+non è una directory) o \errcode{ENOTEMPTY} (se non è vuota). Chiaramente
 \var{newpath} non può contenere \var{oldpath} altrimenti si avrà un errore
-\macro{EINVAL}.
+\errcode{EINVAL}.
 
 Se \var{oldpath} si riferisce a un link simbolico questo sarà rinominato; se
 \var{newpath} è un link simbolico verrà cancellato come qualunque altro file.
@@ -295,17 +295,17 @@ specificato. La funzione che permette di creare un nuovo link simbolico 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso la variabile \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] il filesystem che contiene \param{newpath} non supporta
-    i link simbolici.
-  \item[\macro{ENOENT}] una componente di \param{newpath} non esiste o
+  \item[\errcode{EPERM}] il filesystem che contiene \param{newpath} non
+    supporta i link simbolici.
+  \item[\errcode{ENOENT}] una componente di \param{newpath} non esiste o
     \param{oldpath} è una stringa vuota.
-  \item[\macro{EEXIST}] esiste già un file \param{newpath}.
-  \item[\macro{EROFS}] \param{newpath} è su un filesystem montato in sola
+  \item[\errcode{EEXIST}] esiste già un file \param{newpath}.
+  \item[\errcode{EROFS}] \param{newpath} è su un filesystem montato in sola
     lettura.
   \end{errlist}
-  ed inoltre \macro{EFAULT}, \macro{EACCES}, \macro{ENAMETOOLONG},
-  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{ENOSPC} e
-  \macro{EIO}.}
+  ed inoltre \const{EFAULT}, \const{EACCES}, \const{ENAMETOOLONG},
+  \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP}, \const{ENOSPC} e
+  \const{EIO}.}
 \end{prototype}
 
 Si tenga presente che la funzione non effettua nessun controllo sull'esistenza
@@ -375,12 +375,12 @@ la funzione \func{readlink}, il cui prototipo 
     \var{buff} o -1 per un errore, nel qual caso la variabile
     \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] \param{path} non è un link simbolico o \param{size}
+  \item[\errcode{EINVAL}] \param{path} non è un link simbolico o \param{size}
     non è positiva.
   \end{errlist}
-  ed inoltre \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e
-  \macro{ENOMEM}.}
+  ed inoltre \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{EACCES}, \const{ELOOP}, \const{EIO}, \const{EFAULT} e
+  \const{ENOMEM}.}
 \end{prototype}
 
 La funzione apre il link simbolico, ne legge il contenuto, lo scrive nel
@@ -415,9 +415,9 @@ directory porterebbe il comando ad esaminare \file{/boot}, \file{/boot/boot},
 
 Per questo motivo il kernel e le librerie prevedono che nella risoluzione di
 un pathname possano essere seguiti un numero limitato di link simbolici, il
-cui valore limite è specificato dalla costante \macro{MAXSYMLINKS}. Qualora
+cui valore limite è specificato dalla costante \const{MAXSYMLINKS}. Qualora
 questo limite venga superato viene generato un errore ed \var{errno} viene
-impostata al valore \macro{ELOOP}.
+impostata al valore \errcode{ELOOP}.
 
 Un punto da tenere sempre presente è che, come abbiamo accennato, un link
 simbolico può fare riferimento anche ad un file che non esiste; ad esempio
@@ -454,21 +454,21 @@ 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[\macro{EEXIST}] Un file (o una directory) con quel nome esiste di già. 
-  \item[\macro{EACCESS}] 
+  \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[\macro{EMLINK}] La directory in cui si vuole creare 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[\macro{ENOSPC}] Non c'è abbastanza spazio sul file system per creare
+  \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}
-  ed inoltre anche \macro{EPERM}, \macro{EFAULT}, \macro{ENAMETOOLONG},
-  \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP},
-  \macro{EROFS}.}
+  ed inoltre anche \const{EPERM}, \const{EFAULT}, \const{ENAMETOOLONG},
+  \const{ENOENT}, \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP},
+  \const{EROFS}.}
 \end{prototype}
 
 La funzione crea una nuova directory vuota (che contiene solo le due voci
@@ -489,20 +489,20 @@ suo prototipo 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] Il filesystem non supporta la cancellazione di
+  \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di
     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[\macro{EACCESS}] Non c'è il permesso di scrittura per la directory che
+  \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[\macro{EBUSY}] La directory specificata è la directory di lavoro o la
+  \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
     radice di qualche processo.
-  \item[\macro{ENOTEMPTY}] La directory non è vuota.
+  \item[\errcode{ENOTEMPTY}] La directory non è vuota.
   \end{errlist}
-  ed inoltre anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}.}
+  ed inoltre anche \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP}, \const{EROFS}.}
 \end{prototype}
 
 La modalità con cui avviene la cancellazione è analoga a quella di
@@ -537,16 +537,16 @@ di queste funzioni 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
+  \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
     il filesystem su cui si è cercato di creare \func{pathname} non supporta
     l'operazione.
-  \item[\macro{EINVAL}] Il valore di \var{mode} non indica un file, una fifo o
-    un dipositivo.
-  \item[\macro{EEXIST}] \param{pathname} esiste già o è un link simbolico.
+  \item[\errcode{EINVAL}] Il valore di \var{mode} non indica un file, una fifo
+    un dipositivo.
+  \item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico.
   \end{errlist}
-  ed inoltre anche \macro{EFAULT}, \macro{EACCESS}, \macro{ENAMETOOLONG},
-  \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP},
-  \macro{ENOSPC}, \macro{EROFS}.}
+  ed inoltre anche \const{EFAULT}, \const{EACCESS}, \const{ENAMETOOLONG},
+  \const{ENOENT}, \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP},
+  \const{ENOSPC}, \const{EROFS}.}
 \end{functions}
 
 La funzione permette di creare un file speciale, ma si può usare anche per
@@ -556,10 +556,10 @@ file che si vuole creare ed i relativi permessi, secondo i valori riportati in
 permessi sono comunque modificati nella maniera usuale dal valore di
 \var{umask} (si veda \secref{sec:file_umask}).
 
-Per il tipo di file può essere specificato solo uno fra: \macro{S\_IFREG} per
-un file regolare (che sarà creato vuoto), \macro{S\_IFBLK} per un device a
-blocchi, \macro{S\_IFCHR} per un device a caratteri e \macro{S\_IFIFO} per una
-fifo. Un valore diverso comporterà l'errore \macro{EINVAL}. Qualora si sia
+Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per
+un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un device a
+blocchi, \const{S\_IFCHR} per un device a caratteri e \const{S\_IFIFO} per una
+fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora si sia
 specificato in \param{mode} un file di dispositivo, il valore di \param{dev}
 viene usato per indicare a quale dispositivo si fa riferimento.
 
@@ -584,9 +584,9 @@ Per creare una fifo (un file speciale, su cui torneremo in dettaglio in
   \funcdecl{int mkfifo(const char *pathname, mode\_t mode)} Crea una fifo.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, nel qual caso \var{errno} assumerà i valori \macro{EACCESS},
-    \macro{EEXIST}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOSPC},
-    \macro{ENOTDIR} e \macro{EROFS}.}
+    errore, nel qual caso \var{errno} assumerà i valori \const{EACCESS},
+    \const{EEXIST}, \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOSPC},
+    \const{ENOTDIR} e \const{EROFS}.}
 \end{functions}
 \noindent come per \func{mknod} il file \param{pathname} non deve esistere
 (neanche come link simbolico); al solito i permessi specificati da
@@ -640,14 +640,14 @@ apposita funzione di libreria,  \func{getcwd}, il cui prototipo 
   allocata, per una dimensione massima di \var{size}.
   
   \bodydesc{La funzione restituisce il puntatore \var{buffer} se riesce,
-    \macro{NULL} se fallisce, in quest'ultimo caso la variabile
+    \val{NULL} se fallisce, in quest'ultimo caso la variabile
     \var{errno} è impostata con i seguenti codici di errore:
   \begin{errlist}
-  \item[\macro{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non
+  \item[\errcode{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non
     è nullo.
-  \item[\macro{ERANGE}] L'argomento \var{size} è più piccolo della
+  \item[\errcode{ERANGE}] L'argomento \var{size} è più piccolo della
     lunghezza del pathname. 
-  \item[\macro{EACCESS}] Manca il permesso di lettura o di ricerca su uno dei
+  \item[\errcode{EACCESS}] Manca il permesso di lettura o di ricerca su uno dei
     componenti del pathname (cioè su una delle directory superiori alla
     corrente).
   \end{errlist}}
@@ -666,7 +666,7 @@ volta cessato il suo utilizzo.
 Di questa funzione esiste una versione \code{char *getwd(char *buffer)}
 fatta per compatibilità all'indietro con BSD, che non consente di specificare
 la dimensione del buffer; esso deve essere allocato in precedenza ed avere una
-dimensione superiore a \macro{PATH\_MAX} (di solito 256 byte, vedi
+dimensione superiore a \const{PATH\_MAX} (di solito 256 byte, vedi
 \secref{sec:sys_limits}); il problema è che in Linux non esiste una dimensione
 superiore per un pathname, per cui non è detto che il buffer sia sufficiente a
 contenere il nome del file, e questa è la ragione principale per cui questa
@@ -674,7 +674,7 @@ funzione 
 
 Una seconda funzione simile è \code{char *get\_current\_dir\_name(void)} che è
 sostanzialmente equivalente ad una \code{getcwd(NULL, 0)}, con la sola
-differenza che essa ritorna il valore della variabile di ambiente \macro{PWD},
+differenza che essa ritorna il valore della variabile di ambiente \val{PWD},
 che essendo costruita dalla shell può contenere un pathname comprendente anche
 dei link simbolici. Usando \func{getcwd} infatti, essendo il pathname ricavato
 risalendo all'indietro l'albero della directory, si perderebbe traccia di ogni
@@ -689,12 +689,12 @@ appunto per \textit{change directory}, il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore,
     nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\macro{ENOTDIR}] Non si è specificata una directory.
-  \item[\macro{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
+  \item[\errcode{ENOTDIR}] Non si è specificata una directory.
+  \item[\errcode{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
     \param{path}.
   \end{errlist}
-  ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{ENOMEM}, \macro{ELOOP} e \macro{EIO}.}
+  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{ENOMEM}, \const{ELOOP} e \const{EIO}.}
 \end{prototype}
 \noindent ed ovviamente \param{pathname} deve indicare una directory per la
 quale si hanno i permessi di accesso.
@@ -707,8 +707,8 @@ usa \func{fchdir}, il cui prototipo 
   pathname.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, in caso di errore \var{errno} assumerà i valori \macro{EBADF} o
-    \macro{EACCES}.}
+    errore, in caso di errore \var{errno} assumerà i valori \const{EBADF} o
+    \const{EACCES}.}
 \end{prototype}
 \noindent anche in questo caso \param{fd} deve essere un file descriptor
 valido che fa riferimento ad una directory. Inoltre l'unico errore di accesso
@@ -736,19 +736,19 @@ di queste funzioni 
   non esistente al momento dell'invocazione. 
 
   \bodydesc{La funzione ritorna il puntatore alla stringa con il nome o
-  \macro{NULL} in caso di fallimento. Non sono definiti errori.}
+  \val{NULL} in caso di fallimento. Non sono definiti errori.}
 \end{prototype}
 \noindent se si è passato un puntatore \param{string} non nullo questo deve
-essere di dimensione \macro{L\_tmpnam} (costante definita in \file{stdio.h},
-come \macro{P\_tmpdir} e \macro{TMP\_MAX}) ed il nome generato vi verrà
+essere di dimensione \const{L\_tmpnam} (costante definita in \file{stdio.h},
+come \const{P\_tmpdir} e \const{TMP\_MAX}) ed il nome generato vi verrà
 copiato automaticamente; altrimenti il nome sarà generato in un buffer statico
 interno che verrà sovrascritto ad una chiamata successiva.  Successive
 invocazioni della funzione continueranno a restituire nomi unici fino ad un
-massimo di \macro{TMP\_MAX} volte. Al nome viene automaticamente aggiunto come
-prefisso la directory specificata da \macro{P\_tmpdir}.
+massimo di \const{TMP\_MAX} volte. Al nome viene automaticamente aggiunto come
+prefisso la directory specificata da \const{P\_tmpdir}.
 
 Di questa funzione esiste una versione rientrante, \func{tmpnam\_r}, che non
-fa nulla quando si passa \macro{NULL} come parametro. Una funzione simile,
+fa nulla quando si passa \val{NULL} come parametro. Una funzione simile,
 \func{tempnam}, permette di specificare un prefisso per il file
 esplicitamente, il suo prototipo è:
 \begin{prototype}{stdio.h}{char *tempnam(const char *dir, const char *pfx)}
@@ -756,8 +756,8 @@ esplicitamente, il suo prototipo 
   non esistente al momento dell'invocazione.
 
   \bodydesc{La funzione ritorna il puntatore alla stringa con il nome o
-  \macro{NULL} in caso di fallimento, \var{errno} viene impostata a
-  \macro{ENOMEM} qualora fallisca l'allocazione della stringa.}
+  \val{NULL} in caso di fallimento, \var{errno} viene impostata a
+  \const{ENOMEM} qualora fallisca l'allocazione della stringa.}
 \end{prototype}
 
 La funzione alloca con \code{malloc} la stringa in cui restituisce il nome,
@@ -767,11 +767,11 @@ massimo 5 caratteri per il nome provvisorio. La funzione assegna come
 directory per il file temporaneo (verificando che esista e sia accessibili),
 la prima valida delle seguenti:
 \begin{itemize*}
-\item La variabile di ambiente \macro{TMPNAME} (non ha effetto se non è
+\item La variabile di ambiente \const{TMPNAME} (non ha effetto se non è
   definita o se il programma chiamante è \acr{suid} o \acr{sgid}, vedi
   \secref{sec:file_suid_sgid}).
-\item il valore dell'argomento \param{dir} (se diverso da \macro{NULL}).
-\item Il valore della costante \macro{P\_tmpdir}.
+\item il valore dell'argomento \param{dir} (se diverso da \val{NULL}).
+\item Il valore della costante \const{P\_tmpdir}.
 \item la directory \file{/tmp}.
 \end{itemize*}
 
@@ -780,7 +780,7 @@ ottenere un nome duplicato, nulla assicura che un altro processo non possa
 avere creato, fra l'ottenimento del nome e l'apertura del file, un altro file
 con lo stesso nome; per questo motivo quando si usa il nome ottenuto da una di
 queste funzioni occorre sempre aprire il nuovo file in modalità di esclusione
-(cioè con l'opzione \macro{O\_EXCL} per i file descriptor o con il flag
+(cioè con l'opzione \const{O\_EXCL} per i file descriptor o con il flag
 \code{x} per gli stream) che fa fallire l'apertura in caso il file sia già
 esistente.
 
@@ -790,20 +790,20 @@ POSIX definisce la funzione \func{tempfile}, il cui prototipo 
   Restituisce un file temporaneo aperto in lettura/scrittura.
   
   \bodydesc{La funzione ritorna il puntatore allo stream associato al file
-    temporaneo in caso di successo e \macro{NULL} in caso di errore, nel qual
+    temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual
     caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
-    \item[\macro{EEXIST}] Non è stato possibile generare un nome univoco.
+    \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+    \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco.
     \end{errlist}
-    ed inoltre \macro{EFAULT}, \macro{EMFILE}, \macro{ENFILE}, \macro{ENOSPC},
-    \macro{EROFS} e \macro{EACCESS}.}
+    ed inoltre \const{EFAULT}, \const{EMFILE}, \const{ENFILE}, \const{ENOSPC},
+    \const{EROFS} e \const{EACCESS}.}
 \end{prototype}
 \noindent essa restituisce direttamente uno stream già aperto (in modalità
 \code{r+b}, si veda \secref{sec:file_fopen}) e pronto per l'uso, che viene
 automaticamente cancellato alla sua chiusura o all'uscita dal programma. Lo
 standard non specifica in quale directory verrà aperto il file, ma le
-\acr{glibc} prima tentano con \macro{P\_tmpdir} e poi con \file{/tmp}. Questa
+\acr{glibc} prima tentano con \const{P\_tmpdir} e poi con \file{/tmp}. Questa
 funzione è rientrante e non soffre di problemi di \textit{race
   condition}\index{race condition}.
 
@@ -818,10 +818,10 @@ il suo prototipo 
   \param{template}.
   
   \bodydesc{La funzione ritorna il puntatore \param{template} in caso di
-    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno}
+    successo e \val{NULL} in caso di errore, nel qual caso \var{errno}
     assumerà i valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
+    \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \end{errlist}}
 \end{prototype}
 \noindent dato che \param{template} deve poter essere modificata dalla
@@ -846,14 +846,14 @@ prototipo 
   \bodydesc{La funzione ritorna il file descriptor in caso successo e
     -1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
-    \item[\macro{EEXIST}] non è riuscita a creare un file temporano, il
+    \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
+    \item[\errcode{EEXIST}] non è riuscita a creare un file temporano, il
       contenuto di \param{template} è indefinito.
     \end{errlist}}
 \end{prototype}
 \noindent come per \func{mktemp} anche in questo caso \param{template} non può
 essere una stringa costante. La funzione apre un file in lettura/scrittura con
-la funzione \func{open}, usando l'opzione \macro{O\_EXCL} (si veda
+la funzione \func{open}, usando l'opzione \const{O\_EXCL} (si veda
 \secref{sec:file_open}), in questo modo al ritorno della funzione si ha la
 certezza di essere i soli utenti del file. I permessi sono impostati al valore
 \code{0600}\footnote{questo è vero a partire dalle \acr{glibc} 2.0.7, le
@@ -869,10 +869,10 @@ In OpenBSD 
   \code{XXXXXX} finali di \param{template}.
   
   \bodydesc{La funzione ritorna il puntatore al nome della directory in caso
-    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno}
+    successo e \val{NULL} in caso di errore, nel qual caso \var{errno}
     assumerà i valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
+    \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \end{errlist}
     più gli altri eventuali codici di errore di \func{mkdir}.}
 \end{prototype}
@@ -921,9 +921,9 @@ queste funzioni sono i seguenti:
   descriptor \var{filedes}.
   
   \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 per un
-    errore, nel qual caso \var{errno} assumerà uno dei valori: \macro{EBADF},
-    \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT},
-    \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.}
+    errore, nel qual caso \var{errno} assumerà uno dei valori: \const{EBADF},
+    \const{ENOENT}, \const{ENOTDIR}, \const{ELOOP}, \const{EFAULT},
+    \const{EACCESS}, \const{ENOMEM}, \const{ENAMETOOLONG}.}
 \end{functions}
 \noindent il loro comportamento è identico, solo che operano rispettivamente
 su un file, su un link simbolico e su un file descriptor.
@@ -1023,33 +1023,33 @@ un'opportuna combinazione.
     \textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{S\_IFMT}   &  0170000 & bitmask per i bit del tipo di file \\
-    \macro{S\_IFSOCK} &  0140000 & socket             \\
-    \macro{S\_IFLNK}  &  0120000 & link simbolico     \\
-    \macro{S\_IFREG}  &  0100000 & file regolare      \\ 
-    \macro{S\_IFBLK}  &  0060000 & device a blocchi   \\
-    \macro{S\_IFDIR}  &  0040000 & directory          \\ 
-    \macro{S\_IFCHR}  &  0020000 & device a caratteri \\
-    \macro{S\_IFIFO}  &  0010000 & fifo               \\
+    \const{S\_IFMT}   &  0170000 & bitmask per i bit del tipo di file \\
+    \const{S\_IFSOCK} &  0140000 & socket             \\
+    \const{S\_IFLNK}  &  0120000 & link simbolico     \\
+    \const{S\_IFREG}  &  0100000 & file regolare      \\ 
+    \const{S\_IFBLK}  &  0060000 & device a blocchi   \\
+    \const{S\_IFDIR}  &  0040000 & directory          \\ 
+    \const{S\_IFCHR}  &  0020000 & device a caratteri \\
+    \const{S\_IFIFO}  &  0010000 & fifo               \\
     \hline
-    \macro{S\_ISUID}  &  0004000 & set UID bit   \\
-    \macro{S\_ISGID}  &  0002000 & set GID bit   \\
-    \macro{S\_ISVTX}  &  0001000 & sticky bit    \\
+    \const{S\_ISUID}  &  0004000 & set UID bit   \\
+    \const{S\_ISGID}  &  0002000 & set GID bit   \\
+    \const{S\_ISVTX}  &  0001000 & sticky bit    \\
     \hline
-%    \macro{S\_IRWXU}  &  00700   & bitmask per i permessi del proprietario  \\
-    \macro{S\_IRUSR}  &  00400   & il proprietario ha permesso di lettura   \\
-    \macro{S\_IWUSR}  &  00200   & il proprietario ha permesso di scrittura \\
-    \macro{S\_IXUSR}  &  00100   & il proprietario ha permesso di esecuzione\\
+%    \const{S\_IRWXU}  &  00700   & bitmask per i permessi del proprietario  \\
+    \const{S\_IRUSR}  &  00400   & il proprietario ha permesso di lettura   \\
+    \const{S\_IWUSR}  &  00200   & il proprietario ha permesso di scrittura \\
+    \const{S\_IXUSR}  &  00100   & il proprietario ha permesso di esecuzione\\
     \hline
-%    \macro{S\_IRWXG}  &  00070   & bitmask per i permessi del gruppo        \\
-    \macro{S\_IRGRP}  &  00040   & il gruppo ha permesso di lettura         \\
-    \macro{S\_IWGRP}  &  00020   & il gruppo ha permesso di scrittura       \\
-    \macro{S\_IXGRP}  &  00010   & il gruppo ha permesso di esecuzione      \\
+%    \const{S\_IRWXG}  &  00070   & bitmask per i permessi del gruppo        \\
+    \const{S\_IRGRP}  &  00040   & il gruppo ha permesso di lettura         \\
+    \const{S\_IWGRP}  &  00020   & il gruppo ha permesso di scrittura       \\
+    \const{S\_IXGRP}  &  00010   & il gruppo ha permesso di esecuzione      \\
     \hline
-%    \macro{S\_IRWXO}  &  00007   & bitmask per i permessi di tutti gli altri\\
-    \macro{S\_IROTH}  &  00004   & gli altri hanno permesso di lettura      \\
-    \macro{S\_IWOTH}  &  00002   & gli altri hanno permesso di esecuzione   \\
-    \macro{S\_IXOTH}  &  00001   & gli altri hanno permesso di esecuzione   \\
+%    \const{S\_IRWXO}  &  00007   & bitmask per i permessi di tutti gli altri\\
+    \const{S\_IROTH}  &  00004   & gli altri hanno permesso di lettura      \\
+    \const{S\_IWOTH}  &  00002   & gli altri hanno permesso di esecuzione   \\
+    \const{S\_IXOTH}  &  00001   & gli altri hanno permesso di esecuzione   \\
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit che compongono il campo
@@ -1100,7 +1100,7 @@ cui si pu
 presenti al di là della dimensione scelta come nuova fine del file.
 
 Un file può sempre essere troncato a zero aprendolo con il flag
-\macro{O\_TRUNC}, ma questo è un caso particolare; per qualunque altra
+\const{O\_TRUNC}, ma questo è un caso particolare; per qualunque altra
 dimensione si possono usare le due funzioni \func{truncate} e
 \func{ftruncate}, i cui prototipi sono:
 \begin{functions}
@@ -1116,18 +1116,18 @@ dimensione si possono usare le due funzioni \func{truncate} e
     errore, nel qual caso \var{errno} viene impostata opportunamente; per
     \func{ftruncate} si hanno i valori:
   \begin{errlist}
-  \item[\macro{EBADF}] \var{fd}  non è un file descriptor.
-  \item[\macro{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file
+  \item[\errcode{EBADF}] \var{fd}  non è un file descriptor.
+  \item[\errcode{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file
     o non è aperto in scrittura.
   \end{errlist}
   per \func{truncate} si hanno:
   \begin{errlist}
-  \item[\macro{EACCES}] il file non ha permesso di scrittura o non si ha il
+  \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
     permesso di esecuzione una delle directory del pathname. 
-  \item[\macro{ETXTBSY}] Il file è un programma in esecuzione.
+  \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
   \end{errlist}
-  ed anche \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.}
+  ed anche \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{EROFS}, \const{EIO}, \const{EFAULT}, \const{ELOOP}.}
 \end{functions}
 
 Se il file è più lungo della lunghezza specificata i dati in eccesso saranno
@@ -1220,9 +1220,9 @@ nell'ultima colonna di \tabref{tab:file_file_times}.
     &         &         &$\bullet$&         &         &         & \\
     \func{creat}  
     &$\bullet$&$\bullet$&$\bullet$&         &$\bullet$&$\bullet$&  con 
-    \macro{O\_CREATE} \\    \func{creat}  
+    \const{O\_CREATE} \\    \func{creat}  
     &         &$\bullet$&$\bullet$&         &$\bullet$&$\bullet$&   
-    con \macro{O\_TRUNC} \\    \func{exec}  
+    con \const{O\_TRUNC} \\    \func{exec}  
     &$\bullet$&         &         &         &         &         & \\
     \func{lchown}  
     &         &         &$\bullet$&         &         &         & \\
@@ -1234,9 +1234,9 @@ nell'ultima colonna di \tabref{tab:file_file_times}.
     &$\bullet$&$\bullet$&$\bullet$&         &$\bullet$&$\bullet$& \\
     \func{open}
     &$\bullet$&$\bullet$&$\bullet$&         &$\bullet$&$\bullet$& con 
-    \macro{O\_CREATE} \\    \func{open}
+    \const{O\_CREATE} \\    \func{open}
     &         &$\bullet$&$\bullet$&         &         &         & con 
-    \macro{O\_TRUNC}  \\    \func{pipe}
+    \const{O\_TRUNC}  \\    \func{pipe}
     &$\bullet$&$\bullet$&$\bullet$&         &         &         & \\
     \func{read}
     &$\bullet$&         &         &         &         &         & \\
@@ -1295,13 +1295,13 @@ funzione \func{utime}, il cui prototipo 
 
 Cambia i tempi di ultimo accesso e modifica dell'inode specificato da
 \param{filename} secondo i campi \var{actime} e \var{modtime} di
-\param{times}. Se questa è \macro{NULL} allora viene usato il tempo corrente.
+\param{times}. Se questa è \val{NULL} allora viene usato il tempo corrente.
 
 \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{EACCESS}] non si ha il permesso di scrittura sul file.
-  \item[\macro{ENOENT}] \param{filename} non esiste.
+  \item[\errcode{EACCESS}] non si ha il permesso di scrittura sul file.
+  \item[\errcode{ENOENT}] \param{filename} non esiste.
   \end{errlist}}
 \end{prototype}
  
@@ -1326,7 +1326,7 @@ struct utimbuf {
 \end{figure}
 
 L'effetto della funzione e i privilegi necessari per eseguirla dipendono da
-cosa è l'argomento \param{times}; se è \macro{NULL} la funzione imposta il
+cosa è l'argomento \param{times}; se è \val{NULL} la funzione imposta il
 tempo corrente ed è sufficiente avere accesso in scrittura al file; se invece
 si è specificato un valore la funzione avrà successo solo se si è proprietari
 del file (o si hanno i privilegi di amministratore).
@@ -1435,17 +1435,17 @@ che permettono di accedere al valore numerico di questi bit nel campo
     \textbf{\var{st\_mode}} bit & \textbf{Significato} \\
     \hline 
     \hline 
-    \macro{S\_IRUSR}  &  \textit{user-read}, l'utente può leggere     \\
-    \macro{S\_IWUSR}  &  \textit{user-write}, l'utente può scrivere   \\
-    \macro{S\_IXUSR}  &  \textit{user-execute}, l'utente può eseguire \\ 
+    \const{S\_IRUSR}  &  \textit{user-read}, l'utente può leggere     \\
+    \const{S\_IWUSR}  &  \textit{user-write}, l'utente può scrivere   \\
+    \const{S\_IXUSR}  &  \textit{user-execute}, l'utente può eseguire \\ 
     \hline              
-    \macro{S\_IRGRP}  &  \textit{group-read}, il gruppo può leggere    \\
-    \macro{S\_IWGRP}  &  \textit{group-write}, il gruppo può scrivere  \\
-    \macro{S\_IXGRP}  &  \textit{group-execute}, il gruppo può eseguire\\
+    \const{S\_IRGRP}  &  \textit{group-read}, il gruppo può leggere    \\
+    \const{S\_IWGRP}  &  \textit{group-write}, il gruppo può scrivere  \\
+    \const{S\_IXGRP}  &  \textit{group-execute}, il gruppo può eseguire\\
     \hline              
-    \macro{S\_IROTH}  &  \textit{other-read}, tutti possono leggere    \\
-    \macro{S\_IWOTH}  &  \textit{other-write}, tutti possono scrivere  \\
-    \macro{S\_IXOTH}  &  \textit{other-execute}, tutti possono eseguire\\
+    \const{S\_IROTH}  &  \textit{other-read}, tutti possono leggere    \\
+    \const{S\_IWOTH}  &  \textit{other-write}, tutti possono scrivere  \\
+    \const{S\_IXOTH}  &  \textit{other-execute}, tutti possono eseguire\\
     \hline              
   \end{tabular}
   \caption{I bit dei permessi di accesso ai file, come definiti in 
@@ -1562,7 +1562,7 @@ accesso oltre ai bit dei permessi veri e propri, ci sono altri tre bit che
 vengono usati per indicare alcune proprietà speciali dei file.  Due di questi
 sono i bit detti \acr{suid} (da \textit{set-user-ID bit}) e \acr{sgid} (da
 \textit{set-group-ID bit}) che sono identificati dalle costanti
-\macro{S\_ISUID} e \macro{S\_ISGID}.
+\const{S\_ISUID} e \const{S\_ISGID}.
 
 Come spiegato in dettaglio in \secref{sec:proc_exec}, quando si lancia un
 programma il comportamento normale del kernel è quello di impostare gli
@@ -1598,7 +1598,7 @@ il comando \cmd{ls -l}, che visualizza una lettera \cmd{s} al posto della
 \cmd{x} in corrispondenza dei permessi di utente o gruppo. La stessa lettera
 \cmd{s} può essere usata nel comando \cmd{chmod} per impostare questi bit.
 Infine questi bit possono essere controllati all'interno di \var{st\_mode} con
-l'uso delle due costanti \macro{S\_ISUID} e \macro{S\_IGID}, i cui valori sono
+l'uso delle due costanti \const{S\_ISUID} e \const{S\_IGID}, i cui valori sono
 riportati in \tabref{tab:file_mode_flags}.
 
 Gli stessi bit vengono ad assumere in significato completamente diverso per le
@@ -1617,7 +1617,7 @@ dettaglio pi
 \subsection{Il bit \textsl{sticky}}
 \label{sec:file_sticky}
 
-L'ultimo dei bit rimanenti, identificato dalla costante \macro{S\_ISVTX}, è in
+L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in
 parte un rimasuglio delle origini dei sistemi Unix. A quell'epoca infatti la
 memoria virtuale e l'accesso ai files erano molto meno sofisticati e per
 ottenere la massima velocità possibile per i programmi usati più comunemente
@@ -1719,21 +1719,21 @@ da \param{pathname}.
   è consentito ed in caso di errore; nel qual caso la variabile \var{errno}
   assumerà i valori:
   \begin{errlist}
-  \item[\macro{EINVAL}] il valore di \param{mode} non è valido.
-  \item[\macro{EACCES}] l'accesso al file non è consentito, o non si ha il
+  \item[\errcode{EINVAL}] il valore di \param{mode} non è valido.
+  \item[\errcode{EACCES}] l'accesso al file non è consentito, o non si ha il
     permesso di attraversare una delle directory di \param{pathname}.
-  \item[\macro{EROFS}] si è richiesto l'accesso in scrittura per un file su un
-    filesystem montato in sola lettura.
+  \item[\errcode{EROFS}] si è richiesto l'accesso in scrittura per un file su
+    un filesystem montato in sola lettura.
   \end{errlist}
-  ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{ENOTDIR}, \macro{ELOOP}, \macro{EIO}.}
+  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{ENOTDIR}, \const{ELOOP}, \const{EIO}.}
 \end{prototype}
 
 I valori possibili per l'argomento \param{mode} sono esprimibili come
 combinazione delle costanti numeriche riportate in
 \tabref{tab:file_access_mode_val} (attraverso un OR binario delle stesse). I
 primi tre valori implicano anche la verifica dell'esistenza del file, se si
-vuole verificare solo quest'ultima si può usare \macro{F\_OK}, o anche
+vuole verificare solo quest'ultima si può usare \const{F\_OK}, o anche
 direttamente \func{stat}. Nel caso in cui \var{pathname} si riferisca ad un
 link simbolico, questo viene seguito ed il controllo è fatto sul file a cui
 esso fa riferimento.
@@ -1752,10 +1752,10 @@ contrario (o di errore) ritorna -1.
     \textbf{\var{mode}} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{R\_OK} & verifica il permesso di lettura \\
-    \macro{W\_OK} & verifica il permesso di scritture \\
-    \macro{X\_OK} & verifica il permesso di esecuzione \\
-    \macro{F\_OK} & verifica l'esistenza del file \\
+    \const{R\_OK} & verifica il permesso di lettura \\
+    \const{W\_OK} & verifica il permesso di scritture \\
+    \const{X\_OK} & verifica il permesso di esecuzione \\
+    \const{F\_OK} & verifica l'esistenza del file \\
     \hline
   \end{tabular}
   \caption{Valori possibile per il parametro \var{mode} della funzione 
@@ -1788,13 +1788,13 @@ filename e su un file descriptor, i loro prototipi sono:
   \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del
+  \item[\errcode{EPERM}] L'userid effettivo non corrisponde a quello del
     proprietario del file o non è zero.
-    \item[\macro{EROFS}] Il file è su un filesystem in sola lettura.
+    \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura.
   \end{errlist}
-  ed inoltre \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT},
-  \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche \macro{EBADF}.}
+  ed inoltre \const{EIO}; \func{chmod} restituisce anche \const{EFAULT},
+  \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOMEM}, \const{ENOTDIR},
+  \const{EACCES}, \const{ELOOP}; \func{fchmod} anche \const{EBADF}.}
 \end{functions}
 
 Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una
@@ -1810,24 +1810,24 @@ file.
     \textbf{\var{mode}} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{S\_ISUID} & 04000 & set user ID \\
-    \macro{S\_ISGID} & 02000 & set group ID \\
-    \macro{S\_ISVTX} & 01000 & sticky bit \\
+    \const{S\_ISUID} & 04000 & set user ID \\
+    \const{S\_ISGID} & 02000 & set group ID \\
+    \const{S\_ISVTX} & 01000 & sticky bit \\
     \hline
-    \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
-    \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
-    \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
-    \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
+    \const{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
+    \const{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
+    \const{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
+    \const{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
     \hline
-    \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
-    \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
-    \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
-    \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
+    \const{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
+    \const{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
+    \const{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
+    \const{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
     \hline
-    \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
-    \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
-    \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
-    \macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
+    \const{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
+    \const{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
+    \const{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
+    \const{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
     \hline
   \end{tabular}
   \caption{Valori delle costanti usate per indicare i vari bit di
@@ -1853,7 +1853,7 @@ Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha
 comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle
 funzioni infatti è possibile solo se l'userid effettivo del processo
 corrisponde a quello del proprietario del file o dell'amministratore,
-altrimenti esse falliranno con un errore di \macro{EPERM}.
+altrimenti esse falliranno con un errore di \errcode{EPERM}.
 
 Ma oltre a questa regola generale, di immediata comprensione, esistono delle
 limitazioni ulteriori. Per questo motivo, anche se si è proprietari del file,
@@ -1942,13 +1942,13 @@ sono tre e i loro prototipi sono i seguenti:
   \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del
+  \item[\errcode{EPERM}] L'userid effettivo non corrisponde a quello del
     proprietario del file o non è zero, o utente e gruppo non sono validi
   \end{errlist}
-  Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e
-  \macro{EIO}; \func{chown} restituisce anche \macro{EFAULT},
-  \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.}
+  Oltre a questi entrambe restituiscono gli errori \const{EROFS} e
+  \const{EIO}; \func{chown} restituisce anche \const{EFAULT},
+  \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOMEM}, \const{ENOTDIR},
+  \const{EACCES}, \const{ELOOP}; \func{fchown} anche \const{EBADF}.}
 \end{functions}
 
 In Linux soltanto l'amministratore può cambiare il proprietario di un file,
@@ -2104,11 +2104,11 @@ radice con la funzione \func{chroot}, il cui prototipo 
 \bodydesc{La funzione restituisce zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\macro{EPERM}] L'userid effettivo del processo non è zero.
+  \item[\errcode{EPERM}] L'userid effettivo del processo non è zero.
   \end{errlist}
-  ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{ENOMEM}, \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP};
-  \macro{EROFS} e \macro{EIO}.}
+  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{ENOMEM}, \const{ENOTDIR}, \const{EACCES}, \const{ELOOP};
+  \const{EROFS} e \const{EIO}.}
 \end{prototype}
 \noindent in questo modo la directory radice del processo diventerà
 \param{path} (che ovviamente deve esistere) ed ogni pathname assoluto sarà
index 80c641b46409c81788204e91289292883a32a42a..670e55b28db3a1709d4652d863b41a147dfc3e30 100644 (file)
@@ -231,7 +231,7 @@ Le funzioni che si possono usare per aprire uno stream sono solo tre:
   specificato da \param{stream}, se questo è già aperto prima lo chiude.
   
   \bodydesc{Le funzioni ritornano un puntatore valido in caso di successo e
-    \macro{NULL} in caso di errore, in tal caso \var{errno} assumerà il valore
+    \val{NULL} in caso di errore, in tal caso \var{errno} assumerà il valore
     ricevuto dalla funzione sottostante di cui è fallita l'esecuzione.
   
     Gli errori pertanto possono essere quelli di \code{malloc} per tutte
@@ -304,7 +304,7 @@ Le \acr{glibc} supportano alcune estensioni, queste devono essere sempre
 indicate dopo aver specificato il \param{mode} con uno dei valori di
 \tabref{tab:file_fopen_mode}. L'uso del carattere \texttt{x} serve per
 evitare di sovrascrivere un file già esistente (è analoga all'uso
-dell'opzione \macro{O\_EXCL} in \func{open}), se il file specificato già
+dell'opzione \const{O\_EXCL} in \func{open}), se il file specificato già
 esiste e si aggiunge questo carattere a \param{mode} la \func{fopen}
 fallisce. 
 
@@ -323,7 +323,7 @@ non viene duplicato e verr
 
 I nuovi file saranno creati secondo quanto visto in
 \secref{sec:file_ownership} ed avranno i permessi di accesso impostati al
-valore \macro{S\_IRUSR|S\_IWUSR|S\_IRGRP|S\_IWGRP|S\_IROTH|S\_IWOTH} (pari a
+valore \code{S\_IRUSR|S\_IWUSR|S\_IRGRP|S\_IWGRP|S\_IROTH|S\_IWOTH} (pari a
 \var{0666}) modificato secondo il valore di \acr{umask} per il processo (si
 veda \secref{sec:file_umask}).
 
@@ -350,8 +350,8 @@ Uno stream viene chiuso con la funzione \func{fclose} il cui prototipo 
 \begin{prototype}{stdio.h}{int fclose(FILE *stream)}
   Chiude lo stream \param{stream}. 
   
-  \bodydesc{Restituisce 0 in caso di successo e \macro{EOF} in caso di errore,
-    nel qual caso imposta \var{errno} a \macro{EBADF} se il file descriptor
+  \bodydesc{Restituisce 0 in caso di successo e \val{EOF} in caso di errore,
+    nel qual caso imposta \var{errno} a \const{EBADF} se il file descriptor
     indicato da \param{stream} non è valido, o uno dei valori specificati
     dalla sottostante funzione che è fallita (\func{close}, \func{write} o
     \func{fflush}).}
@@ -366,11 +366,11 @@ 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
-\macro{\_GNU\_SOURCE}, il suo prototipo è:
+\const{\_GNU\_SOURCE}, il suo prototipo è:
 \begin{prototype}{stdio.h}{int fcloseall(void)}
   Chiude tutti gli stream. 
   
-  \bodydesc{Restituisce 0 se non ci sono errori ed \macro{EOF} altrimenti.}
+  \bodydesc{Restituisce 0 se non ci sono errori ed \val{EOF} altrimenti.}
 \end{prototype}
 \noindent la funzione esegue lo scarico dei dati bufferizzati in uscita
 e scarta quelli in ingresso, chiudendo tutti i file. Questa funzione è
@@ -402,7 +402,7 @@ A differenza dell'interfaccia dei file descriptor, con gli stream il
 raggiungimento della fine del file è considerato un errore, e viene
 notificato come tale dai valori di uscita delle varie funzioni. Nella
 maggior parte dei casi questo avviene con la restituzione del valore
-intero (di tipo \ctyp{int}) \macro{EOF}\footnote{la costante deve essere
+intero (di tipo \ctyp{int}) \val{EOF}\footnote{la costante deve essere
   negativa, le \acr{glibc} usano -1, altre implementazioni possono avere
   valori diversi.}  definito anch'esso nell'header \file{stdlib.h}.
 
@@ -596,7 +596,7 @@ rispettivi prototipi sono:
   
   \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene
     restituito come intero; in caso di errore o fine del file il valore
-    di ritorno è \macro{EOF}.}
+    di ritorno è \val{EOF}.}
 \end{functions}
 
 A parte \func{getchar}, che si usa in genere per leggere un carattere da
@@ -636,7 +636,7 @@ byte restituiscono un carattere in formato esteso (cio
   \funcdecl{wint\_t getwchar(void)} Equivalente a \code{getwc(stdin)}.
   
   \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in
-    caso di errore o fine del file il valore di ritorno è \macro{WEOF}.}
+    caso di errore o fine del file il valore di ritorno è \const{WEOF}.}
 \end{functions}
 
 Per scrivere un carattere si possono usare tre funzioni analoghe alle
@@ -655,14 +655,14 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e
   
   \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui
     valore viene restituito in caso di successo; in caso di errore o
-    fine del file il valore di ritorno è \macro{EOF}.}
+    fine del file il valore di ritorno è \val{EOF}.}
 \end{functions}
 
 Tutte queste funzioni scrivono sempre un byte alla volta, anche se
 prendono come parametro un \ctyp{int} (che pertanto deve essere ottenuto
 con un cast da un \ctyp{unsigned char}). Anche il valore di ritorno è
 sempre un intero; in caso di errore o fine del file il valore di ritorno
-è \macro{EOF}.
+è \val{EOF}.
 
 Come nel caso dell'I/O binario le \acr{glibc} provvedono per ciascuna
 delle funzioni precedenti, come estensione GNU, una seconda funzione, il
@@ -680,12 +680,12 @@ loro prototipi sono:
   \funcdecl{int putw(int w, FILE *stream)} Scrive la parola \param{w} su
   \param{stream}.
   
-  \bodydesc{Le funzioni restituiscono la parola \param{w}, o \macro{EOF}
+  \bodydesc{Le funzioni restituiscono la parola \param{w}, o \val{EOF}
     in caso di errore o di fine del file.}
 \end{functions}
 \noindent l'uso di queste funzioni è deprecato in favore dell'uso di
 \func{fread} e \func{fwrite}, in quanto non è possibile distinguere il
-valore -1 da una condizione di errore che restituisce \macro{EOF}.
+valore -1 da una condizione di errore che restituisce \val{EOF}.
 
 Uno degli usi più frequenti dell'input/output a caratteri è nei programmi di
 \textit{parsing} in cui si analizza il testo; in questo contesto diventa utile
@@ -703,7 +703,7 @@ lettura si chiama \func{ungetc} ed il suo prototipo 
     char}, sullo stream \param{stream}.
 
   \bodydesc{La funzione ritorna \param{c} in caso di successo e
-  \macro{EOF} in caso di errore.}
+  \val{EOF} in caso di errore.}
 \end{prototype}
 \noindent benché lo standard ANSI C preveda che l'operazione possa
 essere ripetuta per un numero arbitrario di caratteri, alle
@@ -716,8 +716,8 @@ si 
 prima di usare \func{ungetc}, ma di norma la funzione è intesa per
 essere usata per rimandare indietro l'ultimo carattere letto.
 
-Nel caso \param{c} sia un \macro{EOF} la funzione non fa nulla, e
-restituisce sempre \macro{EOF}; così si può usare \func{ungetc} anche
+Nel caso \param{c} sia un \val{EOF} la funzione non fa nulla, e
+restituisce sempre \val{EOF}; così si può usare \func{ungetc} anche
 con il risultato di una lettura alla fine del file.
 
 Se si è alla fine del file si può comunque rimandare indietro un
@@ -754,7 +754,7 @@ prototipi sono:
   massimo di \param{size} byte.
   
   \bodydesc{Le funzioni restituiscono l'indirizzo \param{string} in caso
-    di successo o \macro{NULL} in caso di errore.}
+    di successo o \val{NULL} in caso di errore.}
 \end{functions}
 
 Entrambe le funzioni effettuano la lettura (dal file specificato \func{fgets},
@@ -763,7 +763,7 @@ carattere \textit{newline}, \verb|'\n'|, quello mappato sul tasto di ritorno a
 capo della tastiera), ma \func{gets} sostituisce \verb|'\n'| con uno zero,
 mentre \func{fgets} aggiunge uno zero dopo il \textit{newline}, che resta
 dentro la stringa. Se la lettura incontra la fine del file (o c'è un errore)
-viene restituito un \macro{NULL}, ed il buffer \param{buf} non viene toccato.
+viene restituito un \val{NULL}, ed il buffer \param{buf} non viene toccato.
 L'uso di \func{gets} è deprecato e deve essere assolutamente evitato; la
 funzione infatti non controlla il numero di byte letti, per cui nel caso la
 stringa letta superi le dimensioni del buffer, si avrà un \textit{buffer
@@ -803,7 +803,7 @@ rispettivi prototipi sono:
   \param{stream} la linea \param{string}.
   
   \bodydesc{Le funzioni restituiscono un valore non negativo in caso di
-    successo o \macro{EOF} in caso di errore.}
+    successo o \val{EOF} in caso di errore.}
 \end{functions}
 
 Dato che in questo caso si scrivono i dati in uscita \func{puts} non ha i
@@ -826,7 +826,7 @@ per leggere e scrivere caratteri estesi, i loro prototipi sono:
   linea \param{ws} di caratteri estesi sul file \param{stream}.
   
   \bodydesc{Le funzioni ritornano rispettivamente \param{ws} o un numero
-    non negativo in caso di successo e \macro{NULL} o \macro{EOF} in
+    non negativo in caso di successo e \val{NULL} o \val{EOF} in
     caso di errore o fine del file.}
 \end{functions}
 \noindent il cui comportamento è identico a quello di \func{fgets} e
@@ -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 \macro{\_GNU\_SOURCE} prima di
+essere attivato definendo la macro \const{\_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 è:
@@ -887,7 +887,7 @@ usati dei \textit{value result argument}, passando dei puntatori anzich
 i valori delle variabili, secondo la tecnica spiegata in
 \secref{sec:proc_var_passing}).
 
-Se si passa alla funzione l'indirizzo di un puntatore impostato a \macro{NULL}
+Se si passa alla funzione l'indirizzo di un puntatore impostato a \val{NULL}
 e \var{*n} è zero, la funzione provvede da sola all'allocazione della memoria
 necessaria a contenere la linea. In tutti i casi si ottiene dalla funzione un
 puntatore all'inizio del testo della linea letta. Un esempio di codice può
@@ -1024,12 +1024,12 @@ direttiva, ed uno degli specificatori di conversione (riportati in
     \textbf{Valore} & \textbf{Significato}\\
     \hline
     \hline
-    \cmd{\#} & Chiede la conversione in forma alternativa. \\
-    \cmd{0}  & La conversione è riempita con zeri alla sinistra del valore.\\
-    \cmd{-}  & La conversione viene allineata a sinistra sul bordo del campo.\\
-    \cmd{' '}& Mette uno spazio prima di un numero con segno di valore 
+    \val{\#} & Chiede la conversione in forma alternativa. \\
+    \val{0}  & La conversione è riempita con zeri alla sinistra del valore.\\
+    \val{-}  & La conversione viene allineata a sinistra sul bordo del campo.\\
+    \val{' '}& Mette uno spazio prima di un numero con segno di valore 
                positivo\\
-    \cmd{+}  & Mette sempre il segno ($+$ o $-$) prima di un numero.\\
+    \val{+}  & Mette sempre il segno ($+$ o $-$) prima di un numero.\\
     \hline
   \end{tabular}
   \caption{I valori dei flag per il formato di \func{printf}}
@@ -1044,12 +1044,12 @@ generale essa 
 % [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione
 \end{verbatim}
 \end{center}
-in cui tutti i valori tranne il \cmd{\%} e lo specificatore di conversione
+in cui tutti i valori tranne il \val{\%} e lo specificatore di conversione
 sono opzionali (e per questo sono indicati fra parentesi quadre); si possono
 usare più elementi opzionali, nel qual caso devono essere specificati in
 questo ordine:
 \begin{itemize*}
-\item uno specificatore del parametro da usare (terminato da un \cmd{\$}),
+\item uno specificatore del parametro da usare (terminato da un \val{\$}),
 \item uno o più flag (i cui valori possibili sono riassunti in
   \tabref{tab:file_format_flag}) che controllano il formato di stampa della
   conversione,
@@ -1125,7 +1125,7 @@ tramite il parametro \param{ap}. Per poter far questo ovviamente la lista dei
 parametri dovrà essere opportunamente trattata (l'argomento è esaminato in
 \secref{sec:proc_variadic}), e dopo l'esecuzione della funzione l'argomento
 \param{ap} non sarà più utilizzabile (in generale dovrebbe essere eseguito un
-\macro{va\_end(ap)} ma in Linux questo non è necessario). 
+\code{va\_end(ap)} ma in Linux questo non è necessario). 
 
 Come per \func{sprintf} anche per \func{vsprintf} esiste una analoga
 \func{vsnprintf} che pone un limite sul numero di caratteri che vengono
@@ -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 \macro{\_GNU\_SOURCE}, le due
+l'estensione si attiva al solito definendo \const{\_GNU\_SOURCE}, le due
 funzioni sono:
 \begin{functions}
   \headdecl{stdio.h} 
@@ -1189,7 +1189,7 @@ famiglia \func{scanf}; fra queste le tre pi
   \bodydesc{Le funzioni ritornano il numero di elementi assegnati. Questi
     possono essere in numero inferiore a quelli specificati, ed anche zero.
     Quest'ultimo valore significa che non si è trovata corrispondenza. In caso
-    di errore o fine del file viene invece restituito \macro{EOF}.}
+    di errore o fine del file viene invece restituito \val{EOF}.}
 \end{functions}
 \noindent e come per le analoghe funzioni di scrittura esistono le relative
 \func{vscanf}, \func{vfscanf} \func{vsscanf} che usano un puntatore ad una
@@ -1339,7 +1339,7 @@ il prototipo della funzione 
   
   \bodydesc{Restituisce il numero del file descriptor in caso di successo, e
     -1 qualora \param{stream} non sia valido, nel qual caso imposta
-    \var{errno} a \macro{EBADF}.}
+    \var{errno} a \const{EBADF}.}
 \end{prototype}
 \noindent ed in questo modo diventa possibile usare direttamente \func{fcntl}.
 
@@ -1423,7 +1423,7 @@ stato allocato e rimanere disponibile per tutto il tempo in cui si opera sullo
 stream. In genere conviene allocarlo con \func{malloc} e disallocarlo dopo la
 chiusura del file; ma fintanto che il file è usato all'interno di una
 funzione, può anche essere usata una variabile automatica. In \file{stdio.h} è
-definita la macro \macro{BUFSIZ}, che indica le dimensioni generiche del
+definita la macro \const{BUFSIZ}, che indica le dimensioni generiche del
 buffer di uno stream; queste vengono usate dalla funzione \func{setbuf}.  Non
 è detto però che tale dimensione corrisponda sempre al valore ottimale (che
 può variare a seconda del dispositivo).
@@ -1445,9 +1445,9 @@ coincidano con quelle su cui viene effettuato l'I/O.
       \textbf{Valore} & \textbf{Modalità} \\
       \hline
       \hline
-      \macro{\_IONBF} & \textit{unbuffered}\\
-      \macro{\_IOLBF} & \textit{line buffered}\\
-      \macro{\_IOFBF} & \textit{fully buffered}\\
+      \const{\_IONBF} & \textit{unbuffered}\\
+      \const{\_IOLBF} & \textit{line buffered}\\
+      \const{\_IOFBF} & \textit{fully buffered}\\
       \hline
     \end{tabular}
   \caption{Valori del parametro \param{mode} di \func{setvbuf} 
@@ -1456,7 +1456,7 @@ coincidano con quelle su cui viene effettuato l'I/O.
 \end{table}
 
 Per evitare che \func{setvbuf} imposti il buffer basta passare un valore
-\macro{NULL} per \param{buf} e la funzione ignorerà il parametro \param{size}
+\val{NULL} per \param{buf} e la funzione ignorerà il parametro \param{size}
 usando il buffer allocato automaticamente dal sistema.  Si potrà comunque
 modificare la modalità di bufferizzazione, passando in \param{mode} uno degli
 opportuni valori elencati in \tabref{tab:file_stream_buf_mode}. Qualora si
@@ -1470,11 +1470,11 @@ e \func{setlinebuf}; i loro prototipi sono:
   \headdecl{stdio.h} 
   
   \funcdecl{void setbuf(FILE *stream, char *buf)} Disabilita la
-  bufferizzazione se \param{buf} è \macro{NULL}, altrimenti usa \param{buf}
-  come buffer di dimensione \macro{BUFSIZ} in modalità \textit{fully buffered}.
+  bufferizzazione se \param{buf} è \val{NULL}, altrimenti usa \param{buf}
+  come buffer di dimensione \const{BUFSIZ} in modalità \textit{fully buffered}.
   
   \funcdecl{void setbuffer(FILE *stream, char *buf, size\_t size)} Disabilita
-  la bufferizzazione se \param{buf} è \macro{NULL}, altrimenti usa \param{buf}
+  la bufferizzazione se \param{buf} è \val{NULL}, altrimenti usa \param{buf}
   come buffer di dimensione \param{size} in modalità \textit{fully buffered}.
   
   \funcdecl{void setlinebuf(FILE *stream)} Pone lo stream in modalità
@@ -1503,17 +1503,17 @@ scelta, si pu
   
   Forza la scrittura di tutti i dati bufferizzati dello stream \param{stream}.
   
-  \bodydesc{Restituisce zero in caso di successo, ed \macro{EOF} in caso di
-    errore, impostando \var{errno} a \macro{EBADF} se \param{stream} non è
+  \bodydesc{Restituisce zero in caso di successo, ed \val{EOF} in caso di
+    errore, impostando \var{errno} a \const{EBADF} se \param{stream} non è
     aperto o non è aperto in scrittura, o ad uno degli errori di
     \func{write}.}
 \end{prototype}
 \noindent anche di questa funzione esiste una analoga
-\func{fflush\_unlocked}\footnote{accessibile definendo \macro{\_BSD\_SOURCE} o
-  \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco
+\func{fflush\_unlocked}\footnote{accessibile definendo \const{\_BSD\_SOURCE} o
+  \const{\_SVID\_SOURCE} o \const{\_GNU\_SOURCE}.} che non effettua il blocco
 dello stream.
 
-Se \param{stream} è \macro{NULL} lo scarico dei dati è forzato per tutti gli
+Se \param{stream} è \val{NULL} lo scarico dei dati è forzato per tutti gli
 stream aperti. Esistono però circostanze, ad esempio quando si vuole essere
 sicuri che sia stato eseguito tutto l'output su terminale, in cui serve poter
 effettuare lo scarico dei dati solo per gli stream in modalità line buffered;
@@ -1535,7 +1535,7 @@ pendente; per questo si pu
  
   Cancella i buffer di input e di output dello stream \param{stream}.
   
-  \bodydesc{Restituisce zero in caso di successo, ed \macro{EOF} in caso di
+  \bodydesc{Restituisce zero in caso di successo, ed \val{EOF} in caso di
     errore.}
 \end{prototype}
 
@@ -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 \macro{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono:
+definendo \const{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono:
 \begin{functions}
   \headdecl{stdio.h}
   
@@ -1608,18 +1608,18 @@ prototipo 
   all'acquisizione implicita del blocco sullo stream.
 
   \bodydesc{Restituisce lo stato di locking interno dello stream con uno dei
-  valori \macro{FSETLOCKING\_INTERNAL} o \macro{FSETLOCKING\_BYCALLER}.}
+  valori \const{FSETLOCKING\_INTERNAL} o \const{FSETLOCKING\_BYCALLER}.}
 \end{prototype}
 
 La funzione imposta o legge lo stato della modalità di operazione di uno stream
 nei confronti del locking a seconda del valore specificato con \param{type},
 che può essere uno dei seguenti:
 \begin{basedescript}{\desclabelwidth{4.0cm}}
-\item[\macro{FSETLOCKING\_INTERNAL}] Lo stream userà da ora in poi il blocco
+\item[\const{FSETLOCKING\_INTERNAL}] Lo stream userà da ora in poi il blocco
   implicito predefinito.
-\item[\macro{FSETLOCKING\_BYCALLER}] Al ritorno della funzione sarà l'utente a
+\item[\const{FSETLOCKING\_BYCALLER}] Al ritorno della funzione sarà l'utente a
   dover gestire da solo il locking dello stream.
-\item[\macro{FSETLOCKING\_QUERY}] Restituisce lo stato corrente della modalità
+\item[\const{FSETLOCKING\_QUERY}] Restituisce lo stato corrente della modalità
   di blocco dello stream.
 \end{basedescript}
 
index 9f4e4a8d7ed781434b2783441fe70b3c51b8d614..dde98892019cba1e8b00ee2a7fd87baff995f368 100644 (file)
@@ -495,8 +495,8 @@ Si tenga presente inoltre che usare \macro{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
-(questa è una potenziale sorgente di \textit{race condition}\index{race
-  condition}, vedi \secref{sec:file_atomic}).
+(questa è una potenziale sorgente di \textit{race condition}
+\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
index 2330e6667020a7c6f71b53d39081e6cfd4d43c9c..f3b65754937c36a0b2e2240419b9b7e3f4bf5143 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[\macro{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\const{\_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 \macro{\_POSIX\_C\_SOURCE} lo stato
+  definita con un intero positivo la macro \const{\_POSIX\_C\_SOURCE} lo stato
   di questa non viene preso in considerazione.
-\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\const{\_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[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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[\macro{\_SVID\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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 \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
+  sia \const{\_POSIX\_SOURCE} che \const{\_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[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
+\item[\const{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
   ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio
   \textit{X/Open Unix}.
-\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_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[\macro{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
+\item[\const{\_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 \macro{\_GNU\_SOURCE} prima di
+esplicitamente definendo la macro \const{\_GNU\_SOURCE} prima di
 includere i vari header file.
 
 
index 9069b57be285f6ebfaa1b72a749eda5246340a28..ca43af06ca3b75ab88d3ae07c1da29e196f59d59 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 \newcommand{\code}[1]{\texttt{#1}}    % for simple code
 \newcommand{\func}[1]{%
 \index{#1@{{\tt {#1}} (funzione)}}\texttt{#1}%
-}                                     % library function (or system call)
+}
 \newcommand{\macro}[1]{%
-\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}
+\index{#1@{{\tt {#1}} (macro)}}\texttt{#1}
 }                                     % macro constant
 \newcommand{\errcode}[1]{%
 \index{#1@{{\tt {#1}} (errore)}}\texttt{#1}%
 }                                     % macro constant
 \newcommand{\var}[1]{\texttt{#1}}     % variable 
-\newcommand{\const}[1]{\texttt{#1}}   % constant name
+\newcommand{\val}[1]{\texttt{#1}}     % value 
+\newcommand{\const}[1]{
+\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}
+}                                     % constant name
 \newcommand{\file}[1]{\texttt{#1}}    % file name
 \newcommand{\link}[1]{\texttt{#1}}    % html link
 \newcommand{\ctyp}[1]{\texttt{#1}}    % C standard type
 \newcommand{\type}[1]{%
-\index{#1@{\tt {#1}}}\texttt{#1}%
+\index{#1@{{\tt {#1}} (tipo)}}\texttt{#1}%
 }                                     % system type
 \newcommand{\param}[1]{\texttt{#1}}   % function parameter
 \newcommand{\acr}[1]{\textsl{#1}}     % acrostic (for pid, suid, etc.)
index cc8b3dffdee5975408db4139d47a44976bd7885f..a90c4ed44afeb67b00ef9a8b5f6403f60bc30e30 100644 (file)
@@ -375,7 +375,7 @@ seguenti segmenti:
   \end{lstlisting}
   questo vettore sarà immagazzinato in questo segmento. Anch'esso viene
   allocato all'avvio, e tutte le variabili vengono inizializzate a zero (ed i
-  puntatori a \macro{NULL}).\footnote{si ricordi che questo vale solo per le
+  puntatori a \val{NULL}).\footnote{si ricordi che questo vale solo per le
     variabili che vanno nel segmento dati, e non è affatto vero in generale.}
    
   Storicamente questo segmento viene chiamato BBS (da \textit{block started by
@@ -466,20 +466,20 @@ prototipi sono i seguenti:
   Alloca \var{size} byte nello heap. La memoria viene inizializzata a 0.
   
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
-  di successo e \macro{NULL} in caso di fallimento, nel qual caso
+  di successo e \val{NULL} in caso di fallimento, nel qual caso
   \var{errno} assumerà il valore \macro{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 \macro{NULL} in caso di fallimento, nel qual caso
+  di successo e \val{NULL} in caso di fallimento, nel qual caso
   \var{errno} assumerà il valore \macro{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 \macro{NULL} in caso di fallimento, nel qual caso
+  di successo e \val{NULL} in caso di fallimento, nel qual caso
   \var{errno} assumerà il valore \macro{ENOMEM}.
 \funcdecl{void free(void *ptr)}
   Disalloca lo spazio di memoria puntato da \var{ptr}.
@@ -497,7 +497,7 @@ dinamicamente la quantit
   le \acr{glibc} e le \acr{uClib} quando il valore di \param{size} è nullo.
   Nel primo caso viene comunque restituito un puntatore valido, anche se non è
   chiaro a cosa esso possa fare riferimento, nel secondo caso viene restituito
-  \func{NULL}. Il comportamento è analogo con \code{realloc(NULL, 0)}.} e
+  \val{NULL}. Il comportamento è analogo con \code{realloc(NULL, 0)}.} e
 siccome i puntatori ritornati sono di tipo generico non è necessario
 effettuare un cast per assegnarli a puntatori al tipo di variabile per la
 quale si effettua l'allocazione.
@@ -513,7 +513,7 @@ in caso contrario il comportamento della funzione 
 La funzione \func{realloc} si usa invece per cambiare (in genere aumentare) la
 dimensione di un'area di memoria precedentemente allocata, la funzione vuole
 in ingresso il puntatore restituito dalla precedente chiamata ad una
-\func{malloc} (se è passato un valore \macro{NULL} allora la funzione si
+\func{malloc} (se è passato un valore \val{NULL} allora la funzione si
 comporta come \func{malloc})\footnote{questo è vero per Linux e
   l'implementazione secondo lo standard ANSI C, ma non è vero per alcune
   vecchie implementazioni, inoltre alcune versioni delle librerie del C
@@ -536,7 +536,7 @@ blocco di dati ridimensionato.
 Un errore abbastanza frequente (specie se si ha a che fare con array di
 puntatori) è quello di chiamare \func{free} più di una volta sullo stesso
 puntatore; per evitare questo problema una soluzione di ripiego è quella di
-assegnare sempre a \macro{NULL} ogni puntatore liberato con \func{free}, dato
+assegnare sempre a \val{NULL} ogni puntatore liberato con \func{free}, dato
 che, quando il parametro è un puntatore nullo, \func{free} non esegue nessuna
 operazione.
 
@@ -626,7 +626,7 @@ stack della funzione corrente. La sintassi 
   La memoria non viene inizializzata.
 
   La funzione restituisce il puntatore alla zona di memoria allocata in caso
-  di successo e \macro{NULL} in caso di fallimento, nel qual caso
+  di successo e \val{NULL} in caso di fallimento, nel qual caso
   \var{errno} assumerà il valore \macro{ENOMEM}.
 \end{prototype}
 \noindent ma in questo caso non è più necessario liberare la memoria (e quindi
@@ -686,7 +686,7 @@ analoghe system call a cui fanno da interfaccia. I loro prototipi sono:
   della fine del segmento dati.
   
   La funzione restituisce il puntatore all'inizio della nuova zona di memoria
-  allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual
+  allocata in caso di successo e \val{NULL} in caso di fallimento, nel qual
   caso \macro{errno} assumerà il valore \macro{ENOMEM}.
 \end{functions}
 \noindent in genere si usa \func{sbrk} con un valore zero per ottenere
@@ -1041,7 +1041,7 @@ nella chiamata alla funzione \func{exec} quando questo viene lanciato.
 
 Come per la lista dei parametri anche questa lista è un array di puntatori a
 caratteri, ciascuno dei quali punta ad una stringa, terminata da un
-\macro{NULL}. A differenza di \var{argv[]} in questo caso non si ha una
+\val{NULL}. A differenza di \var{argv[]} in questo caso non si ha una
 lunghezza dell'array data da un equivalente di \var{argc}, ma la lista è
 terminata da un puntatore nullo.
 
@@ -1124,7 +1124,7 @@ il cui prototipo 
   Esamina l'ambiente del processo cercando una stringa che corrisponda a
   quella specificata da \param{name}. 
   
-  \bodydesc{La funzione ritorna \macro{NULL} se non trova nulla, o il
+  \bodydesc{La funzione ritorna \val{NULL} se non trova nulla, o il
     puntatore alla stringa che corrisponde (di solito nella forma
     \cmd{NOME=valore}).}
 \end{prototype}
@@ -1430,7 +1430,7 @@ per \func{printf}).
 Una modalità diversa, che può essere applicata solo quando il tipo dei
 parametri lo rende possibile, è quella che prevede di usare un valore speciale
 come ultimo argomento (come fa ad esempio \func{execl} che usa un puntatore
-\macro{NULL} per indicare la fine della lista degli argomenti).
+\val{NULL} per indicare la fine della lista degli argomenti).
 
 
 \subsection{Potenziali problemi con le variabili automatiche}
index a8852c09dc4ed08bebf2226f4eb9588fbf07fb47..f6e6d50d0e31728fc10ae938fed98292ef6fdf0e 100644 (file)
@@ -75,7 +75,7 @@ vedere per la maggior parte questi limiti attengono alle dimensioni dei dati
 interi, che sono in genere fissati dall'architettura hardware (le analoghe
 informazioni per i dati in virgola mobile sono definite a parte, ed
 accessibili includendo \file{float.h}). Lo standard prevede anche un'altra
-costante, \macro{FOPEN\_MAX}, che può non essere fissa e che pertanto non è
+costante, \const{FOPEN\_MAX}, che può non essere fissa e che pertanto non è
 definita in \file{limits.h}; essa deve essere definita in \file{stdio.h} ed
 avere un valore minimo di 8.
 
@@ -87,23 +87,23 @@ avere un valore minimo di 8.
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{MB\_LEN\_MAX}&       16  & massima dimensione di un 
+    \const{MB\_LEN\_MAX}&       16  & massima dimensione di un 
                                       carattere esteso\\
-    \macro{CHAR\_BIT} &          8  & bit di \ctyp{char}\\
-    \macro{UCHAR\_MAX}&        255  & massimo di \ctyp{unsigned char}\\
-    \macro{SCHAR\_MIN}&       -128  & minimo di \ctyp{signed char}\\
-    \macro{SCHAR\_MAX}&        127  & massimo di \ctyp{signed char}\\
-    \macro{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\
-    \macro{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\
-    \macro{SHRT\_MIN} &     -32768  & minimo di \ctyp{short}\\
-    \macro{SHRT\_MAX} &      32767  & massimo di \ctyp{short}\\
-    \macro{USHRT\_MAX}&      65535  & massimo di \ctyp{unsigned short}\\
-    \macro{INT\_MAX}  & 2147483647  & minimo di \ctyp{int}\\
-    \macro{INT\_MIN}  &-2147483648  & minimo di \ctyp{int}\\
-    \macro{UINT\_MAX} & 4294967295  & massimo di \ctyp{unsigned int}\\
-    \macro{LONG\_MAX} & 2147483647  & massimo di \ctyp{long}\\
-    \macro{LONG\_MIN} &-2147483648  & minimo di \ctyp{long}\\
-    \macro{ULONG\_MAX}& 4294967295  & massimo di \ctyp{unsigned long}\\
+    \const{CHAR\_BIT} &          8  & bit di \ctyp{char}\\
+    \const{UCHAR\_MAX}&        255  & massimo di \ctyp{unsigned char}\\
+    \const{SCHAR\_MIN}&       -128  & minimo di \ctyp{signed char}\\
+    \const{SCHAR\_MAX}&        127  & massimo di \ctyp{signed char}\\
+    \const{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\
+    \const{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\
+    \const{SHRT\_MIN} &     -32768  & minimo di \ctyp{short}\\
+    \const{SHRT\_MAX} &      32767  & massimo di \ctyp{short}\\
+    \const{USHRT\_MAX}&      65535  & massimo di \ctyp{unsigned short}\\
+    \const{INT\_MAX}  & 2147483647  & minimo di \ctyp{int}\\
+    \const{INT\_MIN}  &-2147483648  & minimo di \ctyp{int}\\
+    \const{UINT\_MAX} & 4294967295  & massimo di \ctyp{unsigned int}\\
+    \const{LONG\_MAX} & 2147483647  & massimo di \ctyp{long}\\
+    \const{LONG\_MIN} &-2147483648  & minimo di \ctyp{long}\\
+    \const{ULONG\_MAX}& 4294967295  & massimo di \ctyp{unsigned long}\\
     \hline                
   \end{tabular}
   \caption{Costanti definite in \file{limits.h} in conformità allo standard
@@ -111,10 +111,10 @@ avere un valore minimo di 8.
   \label{tab:sys_ansic_macro}
 \end{table}
 
-\footnotetext[1]{il valore può essere 0 o \macro{SCHAR\_MIN} a seconda che il
+\footnotetext[1]{il valore può essere 0 o \const{SCHAR\_MIN} a seconda che il
   sistema usi caratteri con segno o meno.} 
 
-\footnotetext[2]{il valore può essere \macro{UCHAR\_MAX} o \macro{SCHAR\_MAX}
+\footnotetext[2]{il valore può essere \const{UCHAR\_MAX} o \const{SCHAR\_MAX}
   a seconda che il sistema usi caratteri con segno o meno.}
 
 A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo
@@ -129,9 +129,9 @@ A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\
-    \macro{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\
-    \macro{ULLONG\_MAX}&18446744073709551615&
+    \const{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\
+    \const{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\
+    \const{ULLONG\_MAX}&18446744073709551615&
     massimo di \ctyp{unsigned long long}\\
     \hline                
   \end{tabular}
@@ -162,21 +162,21 @@ file, riportate in \tabref{tab:sys_file_macro}).
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{ARG\_MAX} &131072& dimensione massima degli argomenti
+    \const{ARG\_MAX} &131072& dimensione massima degli argomenti
                               passati ad una funzione della famiglia
                               \func{exec}.\\ 
-    \macro{CHILD\_MAX} & 999& numero massimo di processi contemporanei
+    \const{CHILD\_MAX} & 999& numero massimo di processi contemporanei
                               che un utente può eseguire.\\
-    \macro{OPEN\_MAX}  & 256& numero massimo di file che un processo
+    \const{OPEN\_MAX}  & 256& numero massimo di file che un processo
                               può mantenere aperti in contemporanea.\\
-    \macro{STREAM\_MAX}&   8& massimo numero di stream aperti per
+    \const{STREAM\_MAX}&   8& massimo numero di stream aperti per
                               processo in contemporanea.\\
-    \macro{TZNAME\_MAX}&   6& dimensione massima del nome di una
+    \const{TZNAME\_MAX}&   6& dimensione massima del nome di una
                               \texttt{timezone} (vedi
                               \secref{sec:sys_time_base})).\\  
-    \macro{NGROUPS\_MAX}& 32& numero di gruppi supplementari per
+    \const{NGROUPS\_MAX}& 32& numero di gruppi supplementari per
                               processo (vedi \secref{sec:proc_access_id}).\\
-    \macro{SSIZE\_MAX}&32767& valore massimo del tipo \type{ssize\_t}.\\
+    \const{SSIZE\_MAX}&32767& valore massimo del tipo \type{ssize\_t}.\\
     \hline
     \hline
   \end{tabular}
@@ -189,7 +189,7 @@ quando i valori a cui fanno riferimento sono fissi, e altrimenti devono essere
 lasciate indefinite, ed i loro valori dei limiti devono essere accessibili
 solo attraverso \func{sysconf}.  In realtà queste vengono sempre definite ad
 un valore generico. Si tenga presente poi che alcuni di questi limiti possono
-assumere valori molto elevati (come \macro{CHILD\_MAX}), e non è pertanto il
+assumere valori molto elevati (come \const{CHILD\_MAX}), e non è pertanto il
 caso di utilizzarli per allocare staticamente della memoria.
 
 A complicare la faccenda si aggiunge il fatto che POSIX.1 prevede una serie di
@@ -206,27 +206,27 @@ riportati in \tabref{tab:sys_posix1_general}.
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{\_POSIX\_ARG\_MAX}    & 4096& dimensione massima degli argomenti
+    \const{\_POSIX\_ARG\_MAX}    & 4096& dimensione massima degli argomenti
                                          passati ad una funzione della famiglia
                                          \func{exec}.\\ 
-    \macro{\_POSIX\_CHILD\_MAX}  &    6& numero massimo di processi
+    \const{\_POSIX\_CHILD\_MAX}  &    6& numero massimo di processi
                                          contemporanei che un utente può 
                                          eseguire.\\
-    \macro{\_POSIX\_OPEN\_MAX}   &   16& numero massimo di file che un processo
+    \const{\_POSIX\_OPEN\_MAX}   &   16& numero massimo di file che un processo
                                          può mantenere aperti in 
                                          contemporanea.\\
-    \macro{\_POSIX\_STREAM\_MAX} &    8& massimo numero di stream aperti per
+    \const{\_POSIX\_STREAM\_MAX} &    8& massimo numero di stream aperti per
                                          processo in contemporanea.\\
-    \macro{\_POSIX\_TZNAME\_MAX} &     & dimensione massima del nome di una
+    \const{\_POSIX\_TZNAME\_MAX} &     & dimensione massima del nome di una
                                          \texttt{timezone} (vedi
                                          \secref{sec:sys_date}). \\ 
-    \macro{\_POSIX\_NGROUPS\_MAX}&    0& numero di gruppi supplementari per
+    \const{\_POSIX\_NGROUPS\_MAX}&    0& numero di gruppi supplementari per
                                          processo (vedi 
                                          \secref{sec:proc_access_id}).\\
-    \macro{\_POSIX\_SSIZE\_MAX}  &32767& valore massimo del tipo 
+    \const{\_POSIX\_SSIZE\_MAX}  &32767& valore massimo del tipo 
                                          \type{ssize\_t}.\\
-    \macro{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\
-    \macro{\_POSIX\_AIO\_MAX}    &    1& \\
+    \const{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\
+    \const{\_POSIX\_AIO\_MAX}    &    1& \\
     \hline                
     \hline                
   \end{tabular}
@@ -249,14 +249,14 @@ valori ottenuti da \func{sysconf}.
     \textbf{Macro}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il 
+    \const{\_POSIX\_JOB\_CONTROL}& il sistema supporta il 
                                    \textit{job control} (vedi 
                                    \secref{sec:sess_job_control}).\\
-    \macro{\_POSIX\_SAVED\_IDS}  & il sistema supporta gli identificatori del 
+    \const{\_POSIX\_SAVED\_IDS}  & il sistema supporta gli identificatori del 
                                    gruppo \textit{saved} (vedi 
                                    \secref{sec:proc_access_id})
                                    per il controllo di accesso dei processi\\
-    \macro{\_POSIX\_VERSION}     & fornisce la versione dello standard POSIX.1
+    \const{\_POSIX\_VERSION}     & fornisce la versione dello standard POSIX.1
                                    supportata nel formato YYYYMML (ad esempio 
                                    199009L).\\
     \hline
@@ -316,37 +316,37 @@ relative spiegazioni, si pu
       \textbf{Parametro}&\textbf{Macro sostituita} &\textbf{Significato}\\
       \hline
       \hline
-      \texttt{\_SC\_ARG\_MAX} &\macro{ARG\_MAX}&
+      \texttt{\_SC\_ARG\_MAX} &\const{ARG\_MAX}&
       La dimensione massima degli argomenti passati ad una funzione
       della famiglia \func{exec}.\\
-      \texttt{\_SC\_CHILD\_MAX}&\macro{\_CHILD\_MAX}&
+      \texttt{\_SC\_CHILD\_MAX}&\const{\_CHILD\_MAX}&
       Il numero massimo di processi contemporanei che un utente può
       eseguire.\\
-      \texttt{\_SC\_OPEN\_MAX}&\macro{\_OPEN\_MAX}&
+      \texttt{\_SC\_OPEN\_MAX}&\const{\_OPEN\_MAX}&
       Il numero massimo di file che un processo può mantenere aperti in
       contemporanea.\\
-      \texttt{\_SC\_STREAM\_MAX}& \macro{STREAM\_MAX}&
+      \texttt{\_SC\_STREAM\_MAX}& \const{STREAM\_MAX}&
       Il massimo numero di stream che un processo può mantenere aperti in
       contemporanea. Questo limite previsto anche dallo standard ANSI C, che
       specifica la macro {FOPEN\_MAX}.\\
-      \texttt{\_SC\_TZNAME\_MAX}&\macro{TZNAME\_MAX}&
+      \texttt{\_SC\_TZNAME\_MAX}&\const{TZNAME\_MAX}&
       La dimensione massima di un nome di una \texttt{timezone} (vedi
       \secref{sec:sys_date}).\\ 
-      \texttt{\_SC\_NGROUPS\_MAX}&\macro{NGROUP\_MAX}&
+      \texttt{\_SC\_NGROUPS\_MAX}&\const{NGROUP\_MAX}&
       Massimo numero di gruppi supplementari che può avere un processo (vedi
       \secref{sec:proc_access_id}).\\ 
-      \texttt{\_SC\_SSIZE\_MAX}&\macro{SSIZE\_MAX}& 
+      \texttt{\_SC\_SSIZE\_MAX}&\const{SSIZE\_MAX}& 
       valore massimo del tipo di dato \type{ssize\_t}.\\
-      \texttt{\_SC\_CLK\_TCK}& \macro{CLK\_TCK} &
+      \texttt{\_SC\_CLK\_TCK}& \const{CLK\_TCK} &
       Il numero di \textit{clock tick} al secondo, cioè l'unità di misura del
       \textit{process time} (vedi \secref{sec:sys_unix_time}).\\
-      \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}&
+      \texttt{\_SC\_JOB\_CONTROL}&\const{\_POSIX\_JOB\_CONTROL}&
       Indica se è supportato il \textit{job control} (vedi
       \secref{sec:sess_job_control}) in stile POSIX.\\
-      \texttt{\_SC\_SAVED\_IDS}&\macro{\_POSIX\_SAVED\_IDS}&
+      \texttt{\_SC\_SAVED\_IDS}&\const{\_POSIX\_SAVED\_IDS}&
       Indica se il sistema supporta i \textit{saved id} (vedi
       \secref{sec:proc_access_id}).\\ 
-      \texttt{\_SC\_VERSION}& \macro{\_POSIX\_VERSION} &
+      \texttt{\_SC\_VERSION}& \const{\_POSIX\_VERSION} &
       Indica il mese e l'anno di approvazione della revisione dello standard
       POSIX.1 a cui il sistema fa riferimento, nel formato YYYYMML, la
       revisione più recente è 199009L, che indica il Settembre 1990.\\
@@ -403,14 +403,14 @@ riportate in \tabref{tab:sys_file_macro}.
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline                
-    \macro{LINK\_MAX}   &8  & numero massimo di link a un file\\
-    \macro{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
-    \macro{PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
-    \macro{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe
+    \const{LINK\_MAX}   &8  & numero massimo di link a un file\\
+    \const{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
+    \const{PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
+    \const{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe
                               (vedi \secref{sec:ipc_pipes}).\\
-    \macro{MAX\_CANON}&255  & dimensione di una riga di terminale in modo 
+    \const{MAX\_CANON}&255  & dimensione di una riga di terminale in modo 
                               canonico (vedi \secref{sec:term_design}).\\
-    \macro{MAX\_INPUT}&255  & spazio disponibile nella coda di input 
+    \const{MAX\_INPUT}&255  & spazio disponibile nella coda di input 
                               del terminale (vedi \secref{sec:term_design}).\\
     \hline                
   \end{tabular}
@@ -432,19 +432,19 @@ analoghe di \tabref{tab:sys_posix1_general}.
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file.\\
-    \macro{\_POSIX\_NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
-    \macro{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
-    \macro{\_POSIX\_PIPE\_BUF}& 512  & byte scrivibili atomicamente in una
+    \const{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file.\\
+    \const{\_POSIX\_NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
+    \const{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
+    \const{\_POSIX\_PIPE\_BUF}& 512  & byte scrivibili atomicamente in una
                                        pipe.\\
-    \macro{\_POSIX\_MAX\_CANON}&255  & dimensione di una riga di
+    \const{\_POSIX\_MAX\_CANON}&255  & dimensione di una riga di
                                        terminale in modo canonico.\\
-    \macro{\_POSIX\_MAX\_INPUT}&255  & spazio disponibile nella coda di input 
+    \const{\_POSIX\_MAX\_INPUT}&255  & spazio disponibile nella coda di input 
                                        del terminale.\\
-%    \macro{\_POSIX\_MQ\_OPEN\_MAX}&  8& \\
-%    \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
-%    \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\
-%    \macro{\_POSIX\_DELAYTIMER\_MAX}& 32 & \\
+%    \const{\_POSIX\_MQ\_OPEN\_MAX}&  8& \\
+%    \const{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
+%    \const{\_POSIX\_FD\_SETSIZE}& 16 & \\
+%    \const{\_POSIX\_DELAYTIMER\_MAX}& 32 & \\
     \hline
   \end{tabular}
   \caption{Macro dei valori minimi delle caratteristiche dei file per la
@@ -498,7 +498,7 @@ suo prototipo 
   Restituisce informazioni sul sistema nella struttura \param{info}.
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
-    fallimento, nel qual caso \var{errno} assumerà il valore \macro{EFAULT}.}
+    fallimento, nel qual caso \var{errno} assumerà il valore \const{EFAULT}.}
 \end{prototype}
 
 La funzione, che viene usata dal comando \cmd{uname}, restituisce le
@@ -516,7 +516,7 @@ indicano rispettivamente:
 \end{itemize*}
 l'ultima informazione è stata aggiunta di recente e non è prevista dallo
 standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname},
-solo definendo \macro{\_GNU\_SOURCE}.
+solo definendo \const{\_GNU\_SOURCE}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -541,11 +541,11 @@ struct utsname {
 
 In generale si tenga presente che le dimensioni delle stringe di una
 \var{utsname} non è specificata, e che esse sono sempre terminate con
-\macro{NULL}; il manuale delle \acr{glibc} indica due diverse dimensioni,
-\macro{\_UTSNAME\_LENGTH} per i campi standard e
-\macro{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio;
-altri sistemi usano nomi diversi come \macro{SYS\_NMLN} o \macro{\_SYS\_NMLN}
-o \macro{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux
+\val{null}; il manuale delle \acr{glibc} indica due diverse dimensioni,
+\const{\_UTSNAME\_LENGTH} per i campi standard e
+\const{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio;
+altri sistemi usano nomi diversi come \const{SYS\_NMLN} o \const{\_SYS\_NMLN}
+o \const{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux
 \func{uname} corrisponde in realtà a 3 system call diverse, le prime due usano
 rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la terza usa
 anch'essa 65 byte, ma restituisce anche l'ultimo campo, \var{domainname}, con
@@ -587,21 +587,21 @@ Legge o scrive uno dei parametri di sistema.
 \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{EPERM}] non si ha il permesso di accedere ad uno dei componenti
-    nel cammino specificato per il parametro, o di accedere al parametro nella
-    modalità scelta.
-  \item[\macro{ENOTDIR}] non esiste un parametro corrispondente al nome
+  \item[\errcode{EPERM}] non si ha il permesso di accedere ad uno dei
+    componenti nel cammino specificato per il parametro, o di accedere al
+    parametro nella modalità scelta.
+  \item[\errcode{ENOTDIR}] non esiste un parametro corrispondente al nome
     \param{name}.
-%  \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando
+%  \item[\errcode{EFAULT}] si è specificato \param{oldlenp} zero quando
 %    \param{oldval} è non nullo. 
-  \item[\macro{EINVAL}] o si è specificato un valore non valido per il
+  \item[\errcode{EINVAL}] o si è specificato un valore non valido per il
     parametro che si vuole impostare o lo spazio provvisto per il ritorno di un
     valore non è delle giuste dimensioni.
-  \item[\macro{ENOMEM}] talvolta viene usato più correttamente questo errore
+  \item[\errcode{ENOMEM}] talvolta viene usato più correttamente questo errore
     quando non si è specificato sufficiente spazio per ricevere il valore di un
     parametro.
   \end{errlist}
-  ed inoltre \macro{EFAULT}.
+  ed inoltre \const{EFAULT}.
 }
 \end{functions}
 
@@ -698,29 +698,29 @@ sulla directory \param{target}.
   fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono
   essere restituiti in \var{errno} sono:
   \begin{errlist}
-  \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
-  \item[\macro{ENODEV}] \param{filesystemtype} non esiste o non è configurato
+  \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+  \item[\errcode{ENODEV}] \param{filesystemtype} non esiste o non è configurato
     nel kernel.
-  \item[\macro{ENOTBLK}] non si è usato un \textit{block device} per
+  \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per
     \param{source} quando era richiesto.
-  \item[\macro{EBUSY}] \param{source} è già montato, o non può essere
+  \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere
     rimontato in read-only perché ci sono ancora file aperti in scrittura, o
     \param{target} è ancora in uso.
-  \item[\macro{EINVAL}] il device \param{source} presenta un
+  \item[\errcode{EINVAL}] il device \param{source} presenta un
     \textit{superblock} non valido, o si è cercato di rimontare un filesystem
     non ancora montato, o di montarlo senza che \param{target} sia un
     \textit{mount point} o di spostarlo quando \param{target} non è un
     \textit{mount point} o è \file{/}.
-  \item[\macro{EACCES}] non si ha il permesso di accesso su uno dei componenti
-  del pathname, o si è cercato di montare un filesystem disponibile in sola
-  lettura senza averlo specificato o il device \param{source} è su un
-  filesystem montato con l'opzione \macro{MS\_NODEV}.
-  \item[\macro{ENXIO}] il \textit{major number} del device \param{source} è
+  \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
+    componenti del pathname, o si è cercato di montare un filesystem
+    disponibile in sola lettura senza averlo specificato o il device
+    \param{source} è su un filesystem montato con l'opzione \const{MS\_NODEV}.
+  \item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è
     sbagliato.
-  \item[\macro{EMFILE}] la tabella dei device \textit{dummy} è piena.
+  \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena.
   \end{errlist}
-  ed inoltre \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM},
-  \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
+  ed inoltre \const{ENOTDIR}, \const{EFAULT}, \const{ENOMEM},
+  \const{ENAMETOOLONG}, \const{ENOENT} o \const{ELOOP}.}
 \end{prototype}
 
 La funzione monta sulla directory \param{target}, detta \textit{mount point},
@@ -761,10 +761,10 @@ montaggio con l'argomento \param{mountflags}.
 In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più
 significativi sono un \textit{magic number}\footnote{cioè un numero speciale
   usato come identificativo, che nel caso è \code{0xC0ED}; si può usare la
-  costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
+  costante \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
   riservata al \textit{magic number}.} mentre i 16 meno significativi sono
 usati per specificare le opzioni; essi sono usati come maschera binaria e
-vanno impostati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i
+vanno impostati con un OR aritmetico della costante \const{MS\_MGC\_VAL} con i
 valori riportati in \tabref{tab:sys_mount_flags}.
 
 \begin{table}[htb]
@@ -775,24 +775,24 @@ valori riportati in \tabref{tab:sys_mount_flags}.
     \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{MS\_RDONLY}     &  1 & monta in sola lettura\\
-    \macro{MS\_NOSUID}     &  2 & ignora i bit \acr{suid} e \acr{sgid}\\
-    \macro{MS\_NODEV}      &  4 & impedisce l'accesso ai file di dispositivo\\
-    \macro{MS\_NOEXEC}     &  8 & impedisce di eseguire programmi \\
-    \macro{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
-    \macro{MS\_REMOUNT}    & 32 & rimonta il filesystem cambiando i flag\\
-    \macro{MS\_MANDLOCK}   & 64 & consente il \textit{mandatory locking} (vedi
+    \const{MS\_RDONLY}     &  1 & monta in sola lettura\\
+    \const{MS\_NOSUID}     &  2 & ignora i bit \acr{suid} e \acr{sgid}\\
+    \const{MS\_NODEV}      &  4 & impedisce l'accesso ai file di dispositivo\\
+    \const{MS\_NOEXEC}     &  8 & impedisce di eseguire programmi \\
+    \const{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
+    \const{MS\_REMOUNT}    & 32 & rimonta il filesystem cambiando i flag\\
+    \const{MS\_MANDLOCK}   & 64 & consente il \textit{mandatory locking} (vedi
                                   \secref{sec:file_mand_locking})\\
-    \macro{S\_WRITE}      & 128 & scrive normalmente \\
-    \macro{S\_APPEND}     & 256 & consente la scrittura solo in \textit{append
+    \const{S\_WRITE}      & 128 & scrive normalmente \\
+    \const{S\_APPEND}     & 256 & consente la scrittura solo in \textit{append
                                   mode} (vedi \secref{sec:file_sharing})\\
-    \macro{S\_IMMUTABLE}  & 512 & impedisce che si possano modificare i file \\
-    \macro{MS\_NOATIME}   &1024 & non aggiorna gli \textit{access time} (vedi
+    \const{S\_IMMUTABLE}  & 512 & impedisce che si possano modificare i file \\
+    \const{MS\_NOATIME}   &1024 & non aggiorna gli \textit{access time} (vedi
                                   \secref{sec:file_file_times})\\
-    \macro{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle
+    \const{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle
                                   directory\\
-    \macro{MS\_BIND}      &4096 & monta il filesystem altrove\\
-    \macro{MS\_MOVE}      &8192 & sposta atomicamente il punto di montaggio \\
+    \const{MS\_BIND}      &4096 & monta il filesystem altrove\\
+    \const{MS\_MOVE}      &8192 & sposta atomicamente il punto di montaggio \\
     \hline
   \end{tabular}
   \caption{Tabella dei codici dei flag di montaggio di un filesystem.}
@@ -807,7 +807,7 @@ La funzione \func{mount} pu
 \textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
 alcune delle caratteristiche di funzionamento (ad esempio passare da sola
 lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
-bit di \param{mountflags}, \macro{MS\_REMOUNT}, che se impostato specifica che
+bit di \param{mountflags}, \const{MS\_REMOUNT}, che se impostato specifica che
 deve essere effettuato il rimontaggio del filesystem (con le opzioni
 specificate dagli altri bit), anche in questo caso il valore di \param{source}
 viene ignorato.
@@ -821,12 +821,12 @@ Una volta che non si voglia pi
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
     fallimento, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
-  \item[\macro{EBUSY}]  \param{target} è la directory di lavoro di qualche
+  \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+  \item[\errcode{EBUSY}]  \param{target} è la directory di lavoro di qualche
   processo, o contiene dei file aperti, o un altro mount point.
   \end{errlist}
-  ed inoltre \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM},
-  \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
+  ed inoltre \const{ENOTDIR}, \const{EFAULT}, \const{ENOMEM},
+  \const{ENAMETOOLONG}, \const{ENOENT} o \const{ELOOP}.}
 \end{prototype}
 \noindent la funzione prende il nome della directory su cui il filesystem è
 montato e non il file o il dispositivo che è stato montato,\footnote{questo è
@@ -841,7 +841,7 @@ Si tenga presente che la funzione fallisce quando il filesystem 
 \textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
 filesystem, se questo contiene la directory di lavoro corrente di un qualunque
 processo o il mount point di un altro filesystem; in questo caso l'errore
-restituito è \macro{EBUSY}.
+restituito è \errcode{EBUSY}.
 
 Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni
 casi permette di forzare lo smontaggio di un filesystem, anche quando questo
@@ -853,11 +853,11 @@ risulti occupato; il suo prototipo 
 \end{prototype}
 
 Il valore di \param{flags} è una maschera binaria, e al momento l'unico valore
-definito è il bit \macro{MNT\_FORCE}; gli altri bit devono essere nulli.
-Specificando \macro{MNT\_FORCE} la funzione cercherà di liberare il filesystem
+definito è il bit \const{MNT\_FORCE}; gli altri bit devono essere nulli.
+Specificando \const{MNT\_FORCE} la funzione cercherà di liberare il filesystem
 anche se è occupato per via di una delle condizioni descritte in precedenza. A
 seconda del tipo di filesystem alcune (o tutte) possono essere superate,
-evitando l'errore di \macro{EBUSY}.  In tutti i casi prima dello smontaggio
+evitando l'errore di \errcode{EBUSY}.  In tutti i casi prima dello smontaggio
 viene eseguita una sincronizzazione dei dati. 
 
 Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
@@ -876,12 +876,12 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{ENOSYS}] il filesystem su cui si trova il file specificato non
+  \item[\errcode{ENOSYS}] il filesystem su cui si trova il file specificato non
   supporta la funzione.
   \end{errlist}
-  e \macro{EFAULT} ed \macro{EIO} per entrambe, \macro{EBADF} per
-  \func{fstatfs}, \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
-  \macro{EACCES}, \macro{ELOOP} per \func{statfs}.}
+  e \const{EFAULT} ed \const{EIO} per entrambe, \const{EBADF} per
+  \func{fstatfs}, \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
+  \const{EACCES}, \const{ELOOP} per \func{statfs}.}
 \end{functions}
 
 Queste funzioni permettono di ottenere una serie di informazioni generali
@@ -967,7 +967,7 @@ funzioni, \func{getpwuid} e \func{getpwnam}, i cui prototipi sono:
   Restituiscono le informazioni relative all'utente specificato.
   
   \bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le
-    informazioni in caso di successo e \macro{NULL} nel caso non sia stato
+    informazioni in caso di successo e \val{null} nel caso non sia stato
     trovato nessun utente corrispondente a quanto specificato.}
 \end{functions}
 
@@ -1031,10 +1031,10 @@ mentre la memoria allocata all'indirizzo \param{buffer}, per un massimo di
 \param{buflen} byte, sarà utilizzata per contenere le stringhe puntate dai
 campi di \param{password}. Infine all'indirizzo puntato da \param{result}
 viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
-l'utente esista, o \macro{NULL} altrimenti.  Qualora i dati non possano essere
+l'utente esista, o \val{null} altrimenti.  Qualora i dati non possano essere
 contenuti nei byte specificati da \param{buflen}, la funzione fallirà
-restituendo \macro{ERANGE} (e \param{result} sarà comunque impostato a
-\macro{NULL}).
+restituendo \errcode{ERANGE} (e \param{result} sarà comunque impostato a
+\val{null}).
 
 Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e
 \func{getgrgid} (e le relative analoghe rientranti con la stessa estensione
@@ -1194,12 +1194,12 @@ sono:
 \end{functions}
 
 In caso questo non venga specificato nessun file viene usato il valore
-standard \macro{\_PATH\_UTMP} (che è definito in \file{paths.h}); in genere
+standard \const{\_PATH\_UTMP} (che è definito in \file{paths.h}); in genere
 \func{utmpname} prevede due possibili valori:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{\_PATH\_UTMP}] Specifica il database di accounting per gli utenti
+\item[\const{\_PATH\_UTMP}] Specifica il database di accounting per gli utenti
   correntemente collegati.
-\item[\macro{\_PATH\_WTMP}] Specifica il database di accounting per l'archivio
+\item[\const{\_PATH\_WTMP}] Specifica il database di accounting per l'archivio
   storico degli utenti collegati.
 \end{basedescript}
 corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in
@@ -1225,7 +1225,7 @@ una voce con le funzioni \func{getutent}, \func{getutid}, \func{getutline} e
   Scrive una voce nel database.
 
   \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
-    caso di successo e \macro{NULL} in caso di errore.}
+    caso di successo e \val{null} in caso di errore.}
 \end{functions}
 
 Tutte queste funzioni fanno riferimento ad una struttura di tipo \var{utmp},
@@ -1265,10 +1265,10 @@ struct utmp
 Con \func{getutid} si può cercare una voce specifica, a seconda del valore del
 campo \var{ut\_type} dell'argomento \param{ut}.  Questo può assumere i valori
 riportati in \tabref{tab:sys_ut_type}, quando assume i valori
-\macro{RUN\_LVL}, \macro{BOOT\_TIME}, \macro{OLD\_TIME}, \macro{NEW\_TIME},
+\const{RUN\_LVL}, \const{BOOT\_TIME}, \const{OLD\_TIME}, \const{NEW\_TIME},
 verrà restituito la prima voce che corrisponde al tipo determinato; quando
-invece assume i valori \macro{INIT\_PROCESS}, \macro{LOGIN\_PROCESS},
-\macro{USER\_PROCESS} o \macro{DEAD\_PROCESS} verrà restituita la prima voce
+invece assume i valori \const{INIT\_PROCESS}, \const{LOGIN\_PROCESS},
+\const{USER\_PROCESS} o \const{DEAD\_PROCESS} verrà restituita la prima voce
 corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}.
 
 \begin{table}[htb]
@@ -1279,18 +1279,18 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}.
     \textbf{Funzione} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{EMPTY}         & Non contiene informazioni valide. \\
-    \macro{RUN\_LVL}      & Identica il runlevel del sistema. \\
-    \macro{BOOT\_TIME}    & Identifica il tempo di avvio del sistema \\
-    \macro{OLD\_TIME}     & Identifica quando è stato modificato l'orologio di
+    \const{EMPTY}         & Non contiene informazioni valide. \\
+    \const{RUN\_LVL}      & Identica il runlevel del sistema. \\
+    \const{BOOT\_TIME}    & Identifica il tempo di avvio del sistema \\
+    \const{OLD\_TIME}     & Identifica quando è stato modificato l'orologio di
                             sistema. \\
-    \macro{NEW\_TIME}     & Identifica da quanto è stato modificato il 
+    \const{NEW\_TIME}     & Identifica da quanto è stato modificato il 
                             sistema. \\
-    \macro{INIT\_PROCESS} & Identifica un processo lanciato da \cmd{init}. \\
-    \macro{LOGIN\_PROCESS}& Identifica un processo di login. \\
-    \macro{USER\_PROCESS} & Identifica un processo utente. \\
-    \macro{DEAD\_PROCESS} & Identifica un processo terminato. \\
-    \macro{ACCOUNTING}    & ??? \\
+    \const{INIT\_PROCESS} & Identifica un processo lanciato da \cmd{init}. \\
+    \const{LOGIN\_PROCESS}& Identifica un processo di login. \\
+    \const{USER\_PROCESS} & Identifica un processo utente. \\
+    \const{DEAD\_PROCESS} & Identifica un processo terminato. \\
+    \const{ACCOUNTING}    & ??? \\
     \hline
   \end{tabular}
   \caption{Classificazione delle voci del database di accounting a seconda dei
@@ -1299,7 +1299,7 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}.
 \end{table}
 
 La funzione \func{getutline} esegue la ricerca sulle voci che hanno
-\var{ut\_type} uguale a \macro{LOGIN\_PROCESS} o \macro{USER\_PROCESS},
+\var{ut\_type} uguale a \const{LOGIN\_PROCESS} o \const{USER\_PROCESS},
 restituendo la prima che corrisponde al valore di \var{ut\_line}, che
 specifica il device\footnote{espresso senza il \file{/dev/} iniziale.} di
 terminale che interessa. Lo stesso criterio di ricerca è usato da
@@ -1344,7 +1344,7 @@ prototipi sono:
   specificati.
 
   \bodydesc{Le funzioni ritornano il puntatore ad una struttura \var{utmp} in
-    caso di successo e \macro{NULL} in caso di errore.}
+    caso di successo e \val{null} in caso di errore.}
 \end{functions}
 
 La prima funzione permette l'aggiunta di una voce a \file{wmtp} specificando
@@ -1438,13 +1438,13 @@ funzione \func{getrusage}, il cui prototipo 
 
 
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-  nel qual caso \var{errno} può essere \macro{EINVAL} o \macro{EFAULT}.}
+  nel qual caso \var{errno} può essere \const{EINVAL} o \const{EFAULT}.}
 \end{functions}
 
 L'argomento \param{who} permette di specificare il processo di cui si vuole
 leggere l'uso delle risorse; esso può assumere solo i due valori
-\macro{RUSAGE\_SELF} per indicare il processo corrente e
-\macro{RUSAGE\_CHILDREN} per indicare l'insieme dei processi figli di cui si è
+\const{RUSAGE\_SELF} per indicare il processo corrente e
+\const{RUSAGE\_CHILDREN} per indicare l'insieme dei processi figli di cui si è
 ricevuto lo stato di terminazione. 
 
 
@@ -1505,11 +1505,11 @@ prototipi sono:
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\macro{EINVAL}] I valori per \param{resource} non sono validi.
-    \item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha
+    \item[\errcode{EINVAL}] I valori per \param{resource} non sono validi.
+    \item[\errcode{EPERM}] Un processo senza i privilegi di amministratore ha
     cercato di innalzare i propri limiti.
     \end{errlist}
-  ed \macro{EFAULT}.}
+  ed \const{EFAULT}.}
 \end{functions}
 
 Entrambe le funzioni permettono di specificare su quale risorsa si vuole
@@ -1525,39 +1525,39 @@ specificarne i valori.
     \textbf{Valore} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{RLIMIT\_CPU}    &  Il massimo tempo di CPU che il processo può
+    \const{RLIMIT\_CPU}    &  Il massimo tempo di CPU che il processo può
                               usare. Il superamento del limite comporta
-                              l'emissione di un segnale di \macro{SIGXCPU}.\\
-    \macro{RLIMIT\_FSIZE}  &  La massima dimensione di un file che un processo
+                              l'emissione di un segnale di \const{SIGXCPU}.\\
+    \const{RLIMIT\_FSIZE}  &  La massima dimensione di un file che un processo
                               può usare. Se il processo cerca di scrivere
                               oltre questa dimensione riceverà un segnale di
-                              \macro{SIGXFSZ}.\\
-    \macro{RLIMIT\_DATA}   &  La massima dimensione della memoria dati di un
+                              \const{SIGXFSZ}.\\
+    \const{RLIMIT\_DATA}   &  La massima dimensione della memoria dati di un
                               processo. Il tentativo di allocare più memoria
                               causa il fallimento della funzione di
                               allocazione. \\
-    \macro{RLIMIT\_STACK}  &  La massima dimensione dello stack del
+    \const{RLIMIT\_STACK}  &  La massima dimensione dello stack del
                               processo. Se il processo esegue operazioni che
                               estendano lo stack oltre questa dimensione
-                              riceverà un segnale di \macro{SIGSEGV}.\\
-    \macro{RLIMIT\_CORE}   &  La massima dimensione di un file di \textit{core
+                              riceverà un segnale di \const{SIGSEGV}.\\
+    \const{RLIMIT\_CORE}   &  La massima dimensione di un file di \textit{core
                               dump} creato da un processo. Nel caso le 
                               dimensioni dovessero essere maggiori il file non
                               verrebbe generato.\footnotemark\\
-    \macro{RLIMIT\_RSS}    &  L'ammontare massimo di memoria fisica dato al
+    \const{RLIMIT\_RSS}    &  L'ammontare massimo di memoria fisica dato al
                               processo. Il limite è solo una indicazione per
                               il kernel, qualora ci fosse un surplus di
                               memoria questa verrebbe assegnata.\\
-    \macro{RLIMIT\_NPROC}  &  Il numero massimo di processi che possono essere
+    \const{RLIMIT\_NPROC}  &  Il numero massimo di processi che possono essere
                               creati sullo stesso user id. Se il limite viene
                               raggiunto \func{fork} fallirà con un
-                              \macro{EAGAIN}.\\
-    \macro{RLIMIT\_NOFILE} &  Il numero massimo di file che il processo può
+                              \errcode{EAGAIN}.\\
+    \const{RLIMIT\_NOFILE} &  Il numero massimo di file che il processo può
                               aprire. L'apertura di un ulteriore file fallirà
-                              con un errore \macro{EMFILE}.\\
-    \macro{RLIMIT\_MEMLOCK}&  L'ammontare massimo di memoria che può essere
+                              con un errore \errcode{EMFILE}.\\
+    \const{RLIMIT\_MEMLOCK}&  L'ammontare massimo di memoria che può essere
                               bloccata (vedi \secref{sec:proc_mem_lock}).\\
-    \macro{RLIMIT\_AS}     &  La dimensione massima di tutta la memoria che il
+    \const{RLIMIT\_AS}     &  La dimensione massima di tutta la memoria che il
                               processo può ottenere. Se il processo tenta di
                               allocarne di più  funzioni come \func{brk},
                               \func{malloc} o \func{mmap} falliranno. \\
@@ -1571,7 +1571,7 @@ specificarne i valori.
 \footnotetext{Impostare questo limite a zero è la maniera più semplice per
   evitare la creazione di \file{core} file.}
 
-È inoltre definita la costante \macro{RLIM\_INFINITY} che permette di
+È inoltre definita la costante \const{RLIM\_INFINITY} che permette di
 sbloccare l'uso di una risorsa, ma solo un processo con i privilegi di
 amministratore può innalzare un limite al di sopra del valore corrente del
 limite massimo. Si tenga conto infine che tutti i limiti vengono ereditati dal
@@ -1616,7 +1616,7 @@ La funzione 
 standard la etichetta come obsoleta, mentre lo standard POSIX 1003.1-2001 la
 ha eliminata. In Linux è implementata come una system call nelle architetture
 in cui essa è necessaria, ed in genere restituisce il valore del simbolo
-\macro{PAGE\_SIZE} del kernel, anche se le versioni delle librerie del C
+\const{PAGE\_SIZE} del kernel, anche se le versioni delle librerie del C
 precedenti le \acr{glibc} 2.1 implementavano questa funzione restituendo
 sempre un valore statico.
 
@@ -1638,8 +1638,8 @@ informazioni riguardo la memoria; i loro prototipi sono:
 \end{functions}
 
 Queste funzioni sono equivalenti all'uso della funzione \func{sysconf}
-rispettivamente con i parametri \macro{\_SC\_PHYS\_PAGES} e
-\macro{\_SC\_AVPHYS\_PAGES}. La prima restituisce il numero totale di pagine
+rispettivamente con i parametri \const{\_SC\_PHYS\_PAGES} e
+\const{\_SC\_AVPHYS\_PAGES}. La prima restituisce il numero totale di pagine
 corrispondenti alla RAM della macchina; la seconda invece la memoria
 effettivamente disponibile per i processi.
 
@@ -1647,7 +1647,7 @@ Le \acr{glibc} supportano inoltre, come estensioni GNU, due funzioni che
 restituiscono il numero di processori della macchina (e quello dei processori
 attivi); anche queste sono informazioni comunque ottenibili attraverso
 \func{sysconf} utilizzando rispettivamente i parametri
-\macro{\_SC\_NPROCESSORS\_CONF} e \macro{\_SC\_NPROCESSORS\_ONLN}.
+\const{\_SC\_NPROCESSORS\_CONF} e \const{\_SC\_NPROCESSORS\_ONLN}.
 
 Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che
 permette di ottenere il carico di processore della macchina, in questo modo è
@@ -1701,14 +1701,14 @@ secondo le definizioni:
   Viene misurato in \textit{clock tick}. Un tempo questo corrispondeva al
   numero di interruzioni effettuate dal timer di sistema, adesso lo standard
   POSIX richiede che esso sia pari al valore della costante
-  \macro{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000, qualunque
+  \const{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000, qualunque
   sia la risoluzione reale dell'orologio di sistema e la frequenza delle
   interruzioni del timer.\footnote{quest'ultima, come accennato in
-    \secref{sec:proc_hierarchy}, è invece data dalla costante \macro{HZ}.} Il
+    \secref{sec:proc_hierarchy}, è invece data dalla costante \const{HZ}.} Il
   dato primitivo usato per questo tempo è \type{clock\_t}, che ha quindi una
   risoluzione del microsecondo. Il numero di tick al secondo può essere
   ricavato anche attraverso \func{sysconf} (vedi \secref{sec:sys_sysconf}). Il
-  vecchio simbolo \macro{CLK\_TCK} definito in \file{time.h} è ormai
+  vecchio simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai
   considerato obsoleto.
 \end{description}
 
@@ -1769,8 +1769,8 @@ utilizzato dallo stesso; il suo prototipo 
 
 La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
 secondi occorre moltiplicare il risultato per la costante
-\macro{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
-  POSIX richiede che \macro{CLOCKS\_PER\_SEC} sia definito pari a 1000000
+\const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
+  POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a 1000000
   indipendentemente dalla risoluzione del timer di sistema.} In genere
 \type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un
 valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
@@ -1840,7 +1840,7 @@ in nel suddetto formato; il suo prototipo 
   Legge il valore corrente del \textit{calendar time}.
   
   \bodydesc{La funzione ritorna il valore del \textit{calendar time} in caso
-    di successo e -1 in caso di errore, che può essere solo \macro{EFAULT}.}
+    di successo e -1 in caso di errore, che può essere solo \const{EFAULT}.}
 \end{prototype}
 \noindent dove \param{t}, se non nullo, deve essere  l'indirizzo di una
 variabile su cui duplicare il valore di ritorno.
@@ -1852,12 +1852,12 @@ sia necessario; il suo prototipo 
   Imposta a \param{t} il valore corrente del \textit{calendar time}.
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-    che può essere \macro{EFAULT} o \macro{EPERM}.}
+    che può essere \const{EFAULT} o \const{EPERM}.}
 \end{prototype}
 \noindent dato che modificare l'ora ha un impatto su tutto il sistema 
 il cambiamento dell'orologio è una operazione privilegiata e questa funzione
 può essere usata solo da un processo con i privilegi di amministratore,
-altrimenti la chiamata fallirà con un errore di \macro{EPERM}.
+altrimenti la chiamata fallirà con un errore di \errcode{EPERM}.
 
 Data la scarsa precisione nell'uso di \type{time\_t} (che ha una risoluzione
 massima di un secondo) quando si devono effettuare operazioni sui tempi di
@@ -1882,8 +1882,8 @@ sono:
   
   \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
     caso di errore, nel qual caso \var{errno} può assumere i valori
-    \macro{EINVAL} \macro{EFAULT} e per \func{settimeofday} anche
-    \macro{EPERM}.}
+    \const{EINVAL} \const{EFAULT} e per \func{settimeofday} anche
+    \const{EPERM}.}
 \end{functions}
 
 Queste funzioni utilizzano una struttura di tipo \var{timeval}, la cui
@@ -1925,22 +1925,22 @@ amministratore.  Il secondo parametro di entrambe le funzioni 
 l'ora legale che permettevano il passaggio dal tempo universale all'ora
 locale. Questo parametro è obsoleto e in Linux non è mai stato utilizzato e
 non è supportato né dalle vecchie \textsl{libc5}, né dalle \textsl{glibc}:
-pertanto deve essere sempre impostato a \macro{NULL}.
+pertanto deve essere sempre impostato a \val{null}.
 
 Modificare l'orologio di sistema con queste funzioni è comunque problematico,
 in quanto esse effettuano un cambiamento immediato. Questo può creare dei
 buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
 conseguenze indesiderate; ad esempio se si porta avanti l'orologio si possono
 perdere delle esecuzioni di \cmd{cron} programmate nell'intervallo che si è
-saltato. Per questo motivo la modalità più corretta per impostare l'ora è quella
-di usare la funzione \func{adjtime}, il cui prototipo è:
+saltato. Per questo motivo la modalità più corretta per impostare l'ora è
+quella di usare la funzione \func{adjtime}, il cui prototipo è:
 \begin{prototype}{sys/time.h}
 {int adjtime(const struct timeval *delta, struct timeval *olddelta)} 
   
   Aggiusta del valore \param{delta} l'orologio di sistema.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} assumerà il valore \macro{EPERM}.}
+    errore, nel qual caso \var{errno} assumerà il valore \errcode{EPERM}.}
 \end{prototype}
 
 Questa funzione permette di avere un aggiustamento graduale del tempo di
@@ -1961,7 +1961,7 @@ modificare anche la velocit
   
   \bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
     caso di successo e -1 in caso di errore, nel qual caso \var{errno}
-    assumerà i valori \macro{EFAULT}, \macro{EINVAL} ed \macro{EPERM}.}
+    assumerà i valori \const{EFAULT}, \const{EINVAL} ed \const{EPERM}.}
 \end{prototype}
 
 La funzione richiede una struttura di tipo \var{timex}, la cui definizione,
@@ -2023,37 +2023,38 @@ essere ritrovato in \cite{glibc}.
     \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{ADJ\_OFFSET}         & 0x0001 & Imposta la differenza fra il tempo
+    \const{ADJ\_OFFSET}         & 0x0001 & Imposta la differenza fra il tempo
                                            reale e l'orologio di sistema, che 
                                            deve essere indicata in microsecondi
                                            nel campo \var{offset} di
                                            \var{timex}.\\ 
-    \macro{ADJ\_FREQUENCY}      & 0x0002 & Imposta la differenze in frequenza
+    \const{ADJ\_FREQUENCY}      & 0x0002 & Imposta la differenze in frequenza
                                            fra il tempo reale e l'orologio di
                                            sistema, che deve essere indicata
                                            in parti per milione nel campo
                                            \var{frequency} di \var{timex}.\\
-    \macro{ADJ\_MAXERROR}       & 0x0004 & Imposta il valore massimo dell'errore
+    \const{ADJ\_MAXERROR}       & 0x0004 & Imposta il valore massimo 
+                                           dell'errore
                                            sul tempo, espresso in microsecondi 
                                            nel campo \var{maxerror} di
                                            \var{timex}.\\ 
-    \macro{ADJ\_ESTERROR}       & 0x0008 & Imposta la stima dell'errore
+    \const{ADJ\_ESTERROR}       & 0x0008 & Imposta la stima dell'errore
                                            sul tempo, espresso in microsecondi 
                                            nel campo \var{esterror} di
                                            \var{timex}.\\
-    \macro{ADJ\_STATUS}         & 0x0010 & Imposta alcuni
+    \const{ADJ\_STATUS}         & 0x0010 & Imposta alcuni
                                            valori di stato interni usati dal
                                            sistema nella gestione
                                            dell'orologio specificati nel campo
                                            \var{status} di \var{timex}.\\ 
-    \macro{ADJ\_TIMECONST}      & 0x0020 & Imposta la larghezza di banda del PLL
-                                           implementato dal kernel,
+    \const{ADJ\_TIMECONST}      & 0x0020 & Imposta la larghezza di banda del 
+                                           PLL implementato dal kernel,
                                            specificato nel campo
                                            \var{constant} di \var{timex}.\\ 
-    \macro{ADJ\_TICK}           & 0x4000 & Imposta il valore dei tick del timer
+    \const{ADJ\_TICK}           & 0x4000 & Imposta il valore dei tick del timer
                                            in microsecondi, espresso nel campo
                                            \var{tick} di \var{timex}.\\ 
-    \macro{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum 
+    \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum 
                                            dell'orologio secondo il valore del
                                            campo \var{offset} simulando il
                                            comportamento di \func{adjtime}.\\ 
@@ -2077,12 +2078,12 @@ sintassi specificata per la forma equivalente di questa funzione definita come
     \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{TIME\_OK}   & 0 & L'orologio è sincronizzato.\\ 
-    \macro{TIME\_INS}  & 1 & insert leap second.\\ 
-    \macro{TIME\_DEL}  & 2 & delete leap second.\\ 
-    \macro{TIME\_OOP}  & 3 & leap second in progress.\\ 
-    \macro{TIME\_WAIT} & 4 & leap second has occurred.\\ 
-    \macro{TIME\_BAD}  & 5 & L'orologio non è sincronizzato.\\ 
+    \const{TIME\_OK}   & 0 & L'orologio è sincronizzato.\\ 
+    \const{TIME\_INS}  & 1 & insert leap second.\\ 
+    \const{TIME\_DEL}  & 2 & delete leap second.\\ 
+    \const{TIME\_OOP}  & 3 & leap second in progress.\\ 
+    \const{TIME\_WAIT} & 4 & leap second has occurred.\\ 
+    \const{TIME\_BAD}  & 5 & L'orologio non è sincronizzato.\\ 
     \hline
   \end{tabular}
   \caption{Possibili valori di ritorno di \func{adjtimex}.} 
@@ -2094,7 +2095,7 @@ sistema; questo pu
 \tabref{tab:sys_adjtimex_return}.  Un valore di -1 viene usato per riportare
 un errore; al solito se si cercherà di modificare l'orologio di sistema
 (specificando un \var{mode} diverso da zero) senza avere i privilegi di
-amministratore si otterrà un errore di \macro{EPERM}.
+amministratore si otterrà un errore di \errcode{EPERM}.
 
 
 \subsection{La gestione delle date.}
@@ -2139,7 +2140,7 @@ struttura che si utilizza quando si deve specificare un tempo a partire dai
 dati naturali (ora e data), dato che essa consente anche di trattare la
 gestione del fuso orario e dell'ora legale.\footnote{in realtà i due campi
   \var{tm\_gmtoff} e \var{tm\_zone} sono estensioni previste da BSD e dalle
-  \acr{glibc}, che, quando è definita \macro{\_BSD\_SOURCE}, hanno la forma in
+  \acr{glibc}, che, quando è definita \const{\_BSD\_SOURCE}, hanno la forma in
   \figref{fig:sys_tm_struct}.}
 
 Le funzioni per la gestione del \textit{broken-down time} sono varie e vanno
@@ -2168,7 +2169,7 @@ tempo in una stringa contenente data ed ora, i loro prototipi sono:
   Converte il \textit{broken-down time} in formato \type{time\_t}.
   
   \bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso
-  di successo e \macro{NULL} in caso di errore, tranne che \func{mktime} che
+  di successo e \val{null} in caso di errore, tranne che \func{mktime} che
   restituisce direttamente il valore o -1 in caso di errore.}
 \end{functions}
 
@@ -2178,8 +2179,8 @@ stringa, allocata staticamente, nella forma:
 \begin{verbatim}
 "Wed Jun 30 21:49:08 1993\n"
 \end{verbatim}
-e impostano anche la variabile \var{tzname} con l'informazione della \textit{time
-  zone} corrente; \func{ctime} è banalmente definita in termini di
+e impostano anche la variabile \var{tzname} con l'informazione della
+\textit{time zone} corrente; \func{ctime} è banalmente definita in termini di
 \func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
 statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due
 sostitute rientranti, il cui nome è al solito ottenuto appendendo un
@@ -2215,7 +2216,7 @@ funzione \func{tzset}, il cui prototipo 
 \end{prototype}
 
 La funzione inizializza le variabili di \figref{fig:sys_tzname} a partire dal
-valore della variabile di ambiente \macro{TZ}, se quest'ultima non è definita
+valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita
 verrà usato il file \file{/etc/localtime}.
 
 \begin{figure}[!htb]
@@ -2334,8 +2335,8 @@ controllare sempre che le funzioni chiamate si siano concluse correttamente.
 
 In genere le funzioni di libreria usano un valore speciale per indicare che
 c'è stato un errore. Di solito questo valore è -1 o un puntatore nullo o la
-costante \macro{EOF} (a seconda della funzione); ma questo valore segnala solo
-che c'è stato un errore, non il tipo di errore. 
+costante \val{EOF} (a seconda della funzione); ma questo valore segnala solo
+che c'è stato un errore, non il tipo di errore.
 
 Per riportare il tipo di errore il sistema usa la variabile globale
 \var{errno},\footnote{L'uso di una variabile globale può comportare alcuni
@@ -2384,16 +2385,16 @@ prima funzione che si pu
   \param{errnum}.
   
   \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di
-    errore in caso di successo e \macro{NULL} in caso di errore, nel qual caso
-    \var{errno} assumerà il valore \macro{EINVAL} se si è specificato un
+    errore in caso di successo e \val{null} in caso di errore, nel qual caso
+    \var{errno} assumerà il valore \const{EINVAL} se si è specificato un
     numero di errore non valido.}
 \end{prototype}
 
 In generale \func{strerror} viene usata passando \var{errno} come parametro;
 nel caso si specifichi un codice sbagliato verrà restituito un messaggio di
-errore sconosciuto, e la funzione restituirà come errore \macro{EINVAL}. La
+errore sconosciuto, e la funzione restituirà come errore \errcode{EINVAL}. La
 funzione tiene conto del valore della variabile di ambiente
-\macro{LC\_MESSAGES} per usare eventuali traduzioni dei messaggi d'errore
+\const{LC\_MESSAGES} per usare eventuali traduzioni dei messaggi d'errore
 nella localizzazione presente. 
 
 La funzione utilizza una stringa statica che non deve essere modificata dal
@@ -2411,8 +2412,8 @@ thread 
   (compreso il terminatore) \param{size}.
   
   \bodydesc{La funzione restituisce il puntatore alla stringa; in caso di
-    errore \var{errno} oltre a \macro{EINVAL} può assumere anche il valore
-    \macro{ERANGE} per indicare che non c'è sufficiente memoria per contenere
+    errore \var{errno} oltre a \const{EINVAL} può assumere anche il valore
+    \const{ERANGE} per indicare che non c'è sufficiente memoria per contenere
     la stringa di descrizione.}
 \end{prototype}
 \noindent
@@ -2420,8 +2421,8 @@ che utilizza un buffer che il singolo thread deve allocare, per evitare i
 problemi connessi alla condivisione del buffer statico. La funzione
 restituisce l'indirizzo della stringa usata, che può essere contenuta nel
 buffer specificato da \param{buf}, per una lunghezza non superiore a
-\param{size}, nel qual caso la stringa sarebbe troncata e terminata con
-\macro{NUL}.
+\param{size}, nel qual caso la stringa sarebbe troncata e terminata con uno
+zero (il carattere NUL).
 
 
 Una seconda funzione usata per riportare i codici di errore in maniera