Ancora reindicizzazioni, più CLONE_VFORK, CLONE_VM, CLONE_PTRACED
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 11 Oct 2015 21:52:34 +0000 (21:52 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 11 Oct 2015 21:52:34 +0000 (21:52 +0000)
13 files changed:
fileadv.tex
filedir.tex
fileio.tex
intro.tex
ipc.tex
macro.tex
process.tex
prochand.tex
signal.tex
sockctrl.tex
socket.tex
system.tex
tcpsock.tex

index 9c06b50..027cbaa 100644 (file)
@@ -1836,7 +1836,7 @@ modificano le modalità di notifica.
   ed è utile per riconoscere la chiusura di una connessione dall'altro capo di
   un socket quando si lavora in modalità \textit{edge triggered}.}
 
-Il secondo campo, \var{data}, è una \direct{union} che serve a identificare il
+Il secondo campo, \var{data}, è una \dirct{union} che serve a identificare il
 file descriptor a cui si intende fare riferimento, ed in astratto può
 contenere un valore qualsiasi (specificabile in diverse forme) che ne permetta
 una indicazione univoca. Il modo più comune di usarlo però è quello in cui si
@@ -3336,15 +3336,15 @@ così all'applicazione di collegare la corrispondente coppia di eventi
 Infine due campi \var{name} e \var{len} sono utilizzati soltanto quando
 l'evento è relativo ad un file presente in una directory posta sotto
 osservazione, in tal caso essi contengono rispettivamente il nome del file
-(come \itindsub{pathname}{relativo} \textit{pathname} relativo alla directory
-osservata) e la relativa dimensione in byte. Il campo \var{name} viene sempre
-restituito come stringa terminata da NUL, con uno o più zeri di terminazione,
-a seconda di eventuali necessità di allineamento del risultato, ed il valore
-di \var{len} corrisponde al totale della dimensione di \var{name}, zeri
-aggiuntivi compresi. La stringa con il nome del file viene restituita nella
-lettura subito dopo la struttura \struct{inotify\_event}; questo significa che
-le dimensioni di ciascun evento di \textit{inotify} saranno pari a
-\code{sizeof(\struct{inotify\_event}) + len}.
+(come \textit{pathname} relativo alla directory osservata) e la relativa
+dimensione in byte. Il campo \var{name} viene sempre restituito come stringa
+terminata da NUL, con uno o più zeri di terminazione, a seconda di eventuali
+necessità di allineamento del risultato, ed il valore di \var{len} corrisponde
+al totale della dimensione di \var{name}, zeri aggiuntivi compresi. La stringa
+con il nome del file viene restituita nella lettura subito dopo la struttura
+\struct{inotify\_event}; questo significa che le dimensioni di ciascun evento
+di \textit{inotify} saranno pari a \code{sizeof(\struct{inotify\_event}) +
+  len}.
 
 Vediamo allora un esempio dell'uso dell'interfaccia di \textit{inotify} con un
 semplice programma che permette di mettere sotto osservazione uno o più file e
index 42e71e5..4e7ead4 100644 (file)
@@ -399,7 +399,7 @@ per i dati in essi contenuti.
 
 \begin{figure}[!htb]
   \centering
-  \includegraphics[width=12cm]{img/disk_struct}
+  \includegraphics[width=11cm]{img/disk_struct}
   \caption{Organizzazione dello spazio su un disco in partizioni e
   filesystem.}
   \label{fig:file_disk_filesys}
@@ -414,7 +414,7 @@ esposto in fig.~\ref{fig:file_filesys_detail}.
 
 \begin{figure}[!htb]
   \centering
-  \includegraphics[width=12cm]{img/filesys_struct}
+  \includegraphics[width=11cm]{img/filesys_struct}
   \caption{Strutturazione dei dati all'interno di un filesystem.}
   \label{fig:file_filesys_detail}
 \end{figure}
@@ -739,9 +739,9 @@ In Linux \param{mountflags} deve essere un intero a 32 bit; fino ai kernel
 della serie 2.2.x i 16 più significativi avevano un valore riservato che
 doveva essere specificato obbligatoriamente,\footnote{il valore era il
   \textit{magic number} \code{0xC0ED}, si può usare la costante
-  \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} riservata
+  \constd{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} riservata
   al \textit{magic number}, mentre per specificarlo si può dare un OR
-  aritmetico con la costante \const{MS\_MGC\_VAL}.} e si potevano usare solo i
+  aritmetico con la costante \constd{MS\_MGC\_VAL}.} e si potevano usare solo i
 16 meno significativi. Oggi invece, con un numero di opzioni superiore, sono
 utilizzati tutti e 32 i bit, ma qualora nei 16 più significativi sia presente
 detto valore, che non esprime una combinazione valida, esso viene ignorato. Il
@@ -751,7 +751,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
 
 \begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
 \itindbeg{bind~mount}
-\item[\const{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in cui è
+\item[\constd{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in cui è
   possibile montare una directory di un filesystem in un'altra directory,
   l'opzione è disponibile a partire dai kernel della serie 2.4. In questo caso
   verranno presi in considerazione solo gli argomenti \param{source}, che
@@ -810,7 +810,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
 
 \itindend{bind~mount}
 
-\item[\const{MS\_DIRSYNC}] Richiede che ogni modifica al contenuto di una
+\item[\constd{MS\_DIRSYNC}] Richiede che ogni modifica al contenuto di una
   directory venga immediatamente registrata su disco in maniera sincrona
   (introdotta a partire dai kernel della serie 2.6). L'opzione si applica a
   tutte le directory del filesystem, ma su alcuni filesystem è possibile
@@ -824,13 +824,13 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   operazioni sulle directory non saranno più bufferizzate e si bloccheranno
   fino all'arrivo dei dati sul disco prima che un programma possa proseguire.
 
-\item[\const{MS\_MANDLOCK}] Consente l'uso del \textit{mandatory locking}
+\item[\constd{MS\_MANDLOCK}] Consente l'uso del \textit{mandatory locking}
   (vedi sez.~\ref{sec:file_mand_locking}) sui file del filesystem. Per poterlo
   utilizzare effettivamente però esso dovrà essere comunque attivato
   esplicitamente per i singoli file impostando i permessi come illustrato in
   sez.~\ref{sec:file_mand_locking}.
 
-\item[\const{MS\_MOVE}] Effettua uno del spostamento del \textit{mount point}
+\item[\constd{MS\_MOVE}] Effettua uno del spostamento del \textit{mount point}
   di un filesystem. La directory del \textit{mount point} originale deve
   essere indicata nell'argomento \param{source}, e la sua nuova posizione
   nell'argomento \param{target}. Tutti gli altri argomenti della funzione
@@ -840,10 +840,9 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   sotto \param{source} sarà immediatamente visibile sotto \param{target}. Non
   esiste cioè nessun momento in cui il filesystem non risulti montato in una o
   nell'altra directory e pertanto è garantito che la risoluzione di
-  \itindsub{pathname}{relativo} \textit{pathname} relativi all'interno del
-  filesystem non possa fallire.
+  \textit{pathname} relativi all'interno del filesystem non possa fallire.
 
-\item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
+\item[\constd{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
   degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
   qualunque tipo di file. Dato che l'aggiornamento degli \textit{access time}
   è una funzionalità la cui utilità è spesso irrilevante ma comporta un costo
@@ -855,7 +854,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   sviluppo del kernel sono state introdotte altre opzioni che forniscono
   soluzioni più appropriate e meno radicali.
 
-\item[\const{MS\_NODEV}] Viene disabilitato sul filesystem l'accesso ai file
+\item[\constd{MS\_NODEV}] Viene disabilitato sul filesystem l'accesso ai file
   di dispositivo eventualmente presenti su di esso. L'opzione viene usata come
   misura di precauzione per rendere inutile la presenza di eventuali file di
   dispositivo su filesystem che non dovrebbero contenerne.\footnote{si ricordi
@@ -870,14 +869,14 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   dispositivo con permessi ``opportunamente'' ampliati che gli consentirebbero
   di accedere anche a risorse cui non dovrebbe.
 
-\item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem
+\item[\constd{MS\_NODIRATIME}] Viene disabilitato sul filesystem
   l'aggiornamento degli \textit{access time} (vedi
   sez.~\ref{sec:file_file_times}), ma soltanto per le directory. Costituisce
   una alternativa per \const{MS\_NOATIME}, che elimina l'informazione per le
   directory, che in pratica che non viene mai utilizzata, mantenendola per i
   file in cui invece ha un impiego, sia pur limitato.
 
-\item[\const{MS\_NOEXEC}] Viene disabilitata sul filesystem l'esecuzione di un
+\item[\constd{MS\_NOEXEC}] Viene disabilitata sul filesystem l'esecuzione di un
   qualunque file eseguibile eventualmente presente su di esso. L'opzione viene
   usata come misura di precauzione per rendere impossibile l'uso di programmi
   posti su filesystem che non dovrebbero contenerne.
@@ -893,7 +892,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
     vuole che gli utenti eseguano solo i programmi forniti
     dall'amministratore.}
 
-\item[\const{MS\_NOSUID}] Viene disabilitato sul filesystem l'effetto dei bit
+\item[\constd{MS\_NOSUID}] Viene disabilitato sul filesystem l'effetto dei bit
   dei permessi \acr{suid} e \acr{sgid} (vedi sez.~\ref{sec:file_special_perm})
   eventualmente presenti sui file in esso contenuti. L'opzione viene usata
   come misura di precauzione per rendere inefficace l'effetto di questi bit
@@ -908,7 +907,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   di un altro utente, che gli consentirebbe di eseguirlo per conto di
   quest'ultimo.
 
-\item[\const{MS\_PRIVATE}] Marca un \textit{mount point} come privato. Si
+\item[\constd{MS\_PRIVATE}] Marca un \textit{mount point} come privato. Si
   tratta di una delle nuove opzioni (insieme a \const{MS\_SHARED},
   \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti parte
   dell'infrastruttura degli \textit{shared subtree} introdotta a partire dal
@@ -923,14 +922,14 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   \const{MS\_BIND}. Si usa questo flag principalmente per revocare gli effetti
   delle altre opzioni e riportare il comportamento a quello ordinario.
 
-\item[\const{MS\_RDONLY}] Esegue il montaggio del filesystem in sola lettura,
+\item[\constd{MS\_RDONLY}] Esegue il montaggio del filesystem in sola lettura,
   non sarà possibile nessuna modifica ai suoi contenuti. Viene usato tutte le
   volte che si deve accedere ai contenuti di un filesystem con la certezza che
   questo non venga modificato (ad esempio per ispezionare un filesystem
   corrotto). All'avvio di default il kernel monta la radice in questa
   modalità.
 
-\item[\const{MS\_REC}] Applica ricorsivamente a tutti i \textit{mount point}
+\item[\constd{MS\_REC}] Applica ricorsivamente a tutti i \textit{mount point}
   presenti al di sotto del \textit{mount point} indicato gli effetti della
   opzione degli \textit{shared subtree} associata. Anche questo caso
   l'argomento \param{target} deve fare riferimento ad un \textit{mount point}
@@ -941,7 +940,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   % TODO trattare l'opzione \texttt{lazytime} introdotta con il kernel 4.0,
   % vedi http://lwn.net/Articles/621046/
 
-\item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
+\item[\constd{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
   \textit{access time} sul filesystem soltanto quando questo risulti
   antecedente il valore corrente del \textit{modification time} o del
   \textit{change time} (per i tempi dei file si veda
@@ -962,7 +961,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   l'introduzione di questo comportamento l'uso delle alternative
   \const{MS\_NOATIME} e \const{MS\_NODIRATIME} è sostanzialmente inutile.
 
-\item[\const{MS\_REMOUNT}] Consente di rimontare un filesystem già montato
+\item[\constd{MS\_REMOUNT}] Consente di rimontare un filesystem già montato
   cambiandone le opzioni di montaggio in maniera atomica. In questo modo si
   possono modificare le opzioni del filesystem anche se questo è in uso. Gli
   argomenti \param{source} e \param{target} devono essere gli stessi usati per
@@ -979,7 +978,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
 
 \itindbeg{shared~subtree}
 
-\item[\const{MS\_SHARED}] Marca un \textit{mount point} come \textit{shared
+\item[\constd{MS\_SHARED}] Marca un \textit{mount point} come \textit{shared
     mount}. Si tratta di una delle nuove opzioni (insieme a
   \const{MS\_PRIVATE}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti
   parte dell'infrastruttura dei cosiddetti \textit{shared subtree} introdotta
@@ -1000,13 +999,13 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
 
 \itindend{shared~subtree}
 
-\item[\const{MS\_SILENT}] Richiede la soppressione di alcuni messaggi di
+\item[\constd{MS\_SILENT}] Richiede la soppressione di alcuni messaggi di
   avvertimento nei log del kernel (vedi sez.~\ref{sec:sess_daemon}). L'opzione
   è presente a partire dal kernel 2.6.17 e sostituisce, utilizzando un nome
   non fuorviante, la precedente \const{MS\_VERBOSE}, introdotta nel kernel
   2.6.12, che aveva lo stesso effetto.
 
-\item[\const{MS\_SLAVE}] Marca un \textit{mount point} come \textit{slave
+\item[\constd{MS\_SLAVE}] Marca un \textit{mount point} come \textit{slave
     mount}. Si tratta di una delle nuove opzioni (insieme a
   \const{MS\_PRIVATE}, \const{MS\_SHARED} e \const{MS\_UNBINDABLE}) facenti
   parte dell'infrastruttura degli \textit{shared subtree} introdotta a partire
@@ -1024,13 +1023,13 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   essi potranno eseguire al loro interno ulteriori montaggi che non saranno
   propagati né negli altri né nel \textit{mount point} originale.
 
-\item[\const{MS\_STRICTATIME}] Ripristina il comportamento tradizionale per
+\item[\constd{MS\_STRICTATIME}] Ripristina il comportamento tradizionale per
   cui l'\textit{access time} viene aggiornato ad ogni accesso al
   file. L'opzione è disponibile solo a partire dal kernel 2.6.30 quando il
   comportamento di default del kernel è diventato quello fornito da
   \const{MS\_RELATIME}.
 
-\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona richiedendo che
+\item[\constd{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona richiedendo che
   ogni modifica al contenuto del filesystem venga immediatamente registrata su
   disco. Lo stesso comportamento può essere ottenuto con il flag
   \const{O\_SYNC} di \func{open} (vedi sez.~\ref{sec:file_open_close}).
@@ -1042,7 +1041,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente:
   compromesso in cui questo comportamento avviene solo per le directory, ed ha
   quindi una incidenza nettamente minore, si può usare \const{MS\_DIRSYNC}.
 
-\item[\const{MS\_UNBINDABLE}] Marca un \textit{mount point} come
+\item[\constd{MS\_UNBINDABLE}] Marca un \textit{mount point} come
   \textit{unbindable mount}. Si tratta di una delle nuove opzioni (insieme a
   \const{MS\_PRIVATE}, \const{MS\_SHARED} e \const{MS\_SLAVE}) facenti parte
   dell'infrastruttura degli \textit{shared subtree} introdotta a partire dal
@@ -1135,7 +1134,7 @@ un filesystem anche quando questo risulti occupato; il suo prototipo è:
 Il valore di \param{flags} è una maschera binaria dei flag che controllano le
 modalità di smontaggio, che deve essere specificato con un OR aritmetico delle
 costanti illustrate in tab.~\ref{tab:umount2_flags}.  Specificando
-\const{MNT\_FORCE} la funzione cercherà di liberare il filesystem anche se è
+\constd{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 \errcode{EBUSY}. In tutti i casi prima dello smontaggio viene
@@ -1150,20 +1149,21 @@ eseguita una sincronizzazione dei dati.
     \hline
     \hline
     \const{MNT\_FORCE}  & Forza lo smontaggio del filesystem anche se questo è
-                          occupato (presente dai kernel della serie 2.2).\\
+                           occupato (presente dai kernel della serie 2.2).\\
     \const{MNT\_DETACH} & Esegue uno smontaggio ``\textsl{pigro}'', in cui si
-                          blocca l'accesso ma si aspetta che il filesystem si
-                          liberi (presente dal kernel 2.4.11 e dalla
-                          \acr{glibc} 2.11).\\ 
+                           blocca l'accesso ma si aspetta che il filesystem si
+                           liberi (presente dal kernel 2.4.11 e dalla
+                           \acr{glibc} 2.11).\\ 
     \const{MNT\_EXPIRE} & Se non occupato marca un \textit{mount point} come
-                          ``\textsl{in scadenza}'' in modo che ad una
-                          successiva chiamata senza utilizzo del filesystem
-                          questo venga smontato (presente dal 
-                          kernel 2.6.8 e dalla \acr{glibc} 2.11).\\ 
+                           ``\textsl{in scadenza}'' in modo che ad una
+                           successiva chiamata senza utilizzo del filesystem
+                           questo venga smontato (presente dal 
+                           kernel 2.6.8 e dalla \acr{glibc} 2.11).\\ 
     \const{UMOUNT\_NOFOLLOW}& Non dereferenzia \param{target} se questo è un
-                          collegamento simbolico (vedi
-                          sez.~\ref{sec:link_symlink_rename}) evitando
-                          problemi di sicurezza (presente dal kernel 2.6.34).\\ 
+                               collegamento simbolico (vedi
+                               sez.~\ref{sec:link_symlink_rename}) evitando
+                               problemi di sicurezza (presente dal kernel
+                               2.6.34).\\  
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{flags}
@@ -1171,13 +1171,13 @@ eseguita una sincronizzazione dei dati.
   \label{tab:umount2_flags}
 \end{table}
 
-Con l'opzione \const{MNT\_DETACH} si richiede invece uno smontaggio
+Con l'opzione \constd{MNT\_DETACH} si richiede invece uno smontaggio
 ``\textsl{pigro}'' (o \textit{lazy umount}) in cui il filesystem diventa
 inaccessibile per i nuovi processi subito dopo la chiamata della funzione, ma
 resta accessibile per quelli che lo hanno ancora in uso e non viene smontato
 fintanto che resta occupato.
 
-Con \const{MNT\_EXPIRE}, che non può essere specificato insieme agli altri
+Con \constd{MNT\_EXPIRE}, che non può essere specificato insieme agli altri
 due, si marca il \textit{mount point} di un filesystem non occupato come
 ``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna con un errore di
 \errcode{EAGAIN}, mentre in caso di filesystem occupato si sarebbe ricevuto
@@ -1187,7 +1187,7 @@ verrà smontato. Questo flag consente di realizzare un meccanismo che smonti
 automaticamente i filesystem che restano inutilizzati per un certo periodo di
 tempo.
 
-Infine il flag \const{UMOUNT\_NOFOLLOW} non dereferenzia \param{target} se
+Infine il flag \constd{UMOUNT\_NOFOLLOW} non dereferenzia \param{target} se
 questo è un collegamento simbolico (vedi
 sez.~\ref{sec:link_symlink_rename}). Questa è una misura di sicurezza
 introdotta per evitare, per quei filesystem per il quale è prevista una
@@ -1248,8 +1248,9 @@ del filesystem stesso.
   \label{fig:sys_statfs}
 \end{figure}
 
+\conffilebeg{/etc/mtab}
 La \acr{glibc} provvede infine una serie di funzioni per la gestione dei due
-file \conffile{/etc/fstab}\footnote{più precisamente \funcm{setfsent},
+file \conffiled{/etc/fstab}\footnote{più precisamente \funcm{setfsent},
   \funcm{getfsent}, \funcm{getfsfile}, \funcm{getfsspec}, \funcm{endfsent}.}
 ed \conffile{/etc/mtab}\footnote{più precisamente \funcm{setmntent},
   \funcm{getmntent},\funcm{getmntent\_r}, \funcm{addmntent},\funcm{endmntent},
@@ -1275,6 +1276,7 @@ filesystem montati) generata direttamente dal kernel, e quindi sempre
 disponibile e sempre aggiornata. Per questo motivo tralasceremo la
 trattazione, di queste funzioni, rimandando al manuale della \acr{glibc}
 \cite{GlibcMan} per la documentazione completa.
+\conffileend{/etc/mtab}
 
 % TODO (bassa priorità) scrivere delle funzioni (getfsent e getmntent &C)
 % TODO (bassa priorità) documentare ? swapon e swapoff (man 2 ...) 
@@ -1607,7 +1609,7 @@ nella directory porterebbe il comando ad esaminare \file{/boot},
 Per questo motivo il kernel e le librerie prevedono che nella risoluzione di
 un \textit{pathname} possano essere seguiti fino ad un certo numero massimo di
 collegamenti simbolici, il cui valore limite è specificato dalla costante
-\const{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un
+\constd{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un
 errore ed \var{errno} viene impostata al valore \errcode{ELOOP}, che nella
 quasi totalità dei casi indica appunto che si è creato un collegamento
 simbolico che fa riferimento ad una directory del suo stesso
@@ -2171,9 +2173,9 @@ terminata da uno zero, ed il campo \var{d\_ino}, che contiene il numero di
 segnalata dalla definizione di altrettante macro nella forma
 \code{\_DIRENT\_HAVE\_D\_XXX} dove \code{XXX} è il nome del relativo
 campo. Come si può evincere da fig.~\ref{fig:file_dirent_struct} nel caso di
-Linux sono pertanto definite le macro \macro{\_DIRENT\_HAVE\_D\_TYPE},
-\macro{\_DIRENT\_HAVE\_D\_OFF} e \macro{\_DIRENT\_HAVE\_D\_RECLEN}, mentre non
-è definita la macro \macro{\_DIRENT\_HAVE\_D\_NAMLEN}.
+Linux sono pertanto definite le macro \macrod{\_DIRENT\_HAVE\_D\_TYPE},
+\macrod{\_DIRENT\_HAVE\_D\_OFF} e \macrod{\_DIRENT\_HAVE\_D\_RECLEN}, mentre non
+è definita la macro \macrod{\_DIRENT\_HAVE\_D\_NAMLEN}.
 
 Dato che possono essere presenti campi opzionali e che lo standard
 POSIX.1-2001 non specifica una dimensione definita per il nome dei file (che
@@ -2192,7 +2194,7 @@ ottenere la dimensione della prima parte con la macro di utilità generica
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{stddef.h}
-\fdecl{size\_t \macro{offsetof}(type, member)}
+\fdecl{size\_t \macrod{offsetof}(type, member)}
 \fdesc{Restituisce la posizione del campo \param{member} nella
   struttura \param{type}.}
 } 
@@ -2226,14 +2228,14 @@ valore è disponibile solo per i filesystem che ne supportano la restituzione
     \textbf{Valore} & \textbf{Tipo di file} \\
     \hline
     \hline
-    \const{DT\_UNKNOWN} & Tipo sconosciuto.\\
-    \const{DT\_REG}     & File normale.\\
-    \const{DT\_DIR}     & Directory.\\
-    \const{DT\_LNK}     & Collegamento simbolico.\\
-    \const{DT\_FIFO}    & Fifo.\\
-    \const{DT\_SOCK}    & Socket.\\
-    \const{DT\_CHR}     & Dispositivo a caratteri.\\
-    \const{DT\_BLK}     & Dispositivo a blocchi.\\
+    \constd{DT\_UNKNOWN} & Tipo sconosciuto.\\
+    \constd{DT\_REG}     & File normale.\\
+    \constd{DT\_DIR}     & Directory.\\
+    \constd{DT\_LNK}     & Collegamento simbolico.\\
+    \constd{DT\_FIFO}    & Fifo.\\
+    \constd{DT\_SOCK}    & Socket.\\
+    \constd{DT\_CHR}     & Dispositivo a caratteri.\\
+    \constd{DT\_BLK}     & Dispositivo a blocchi.\\
     \hline    
   \end{tabular}
   \caption{Costanti che indicano i vari tipi di file nel campo \var{d\_type}
@@ -2249,10 +2251,10 @@ definite anche due macro di conversione, \macro{IFTODT} e \macro{DTTOIF}:
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{dirent.h}
-\fdecl{int \macro{IFTODT}(mode\_t MODE)}
+\fdecl{int \macrod{IFTODT}(mode\_t MODE)}
 \fdesc{Converte il tipo di file dal formato di \var{st\_mode} a quello di
   \var{d\_type}.}
-\fdecl{mode\_t \macro{DTTOIF}(int DTYPE)}
+\fdecl{mode\_t \macrod{DTTOIF}(int DTYPE)}
 \fdesc{Converte il tipo di file dal formato di \var{d\_type} a quello di
   \var{st\_mode}.}  
 } 
@@ -2498,9 +2500,9 @@ directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati
   precisamente nel campo \texttt{pwd} della sotto-struttura
   \kstruct{fs\_struct}.} che è chiamata \textsl{directory corrente} o
 \textsl{directory di lavoro} (in inglese \textit{current working directory}).
-La directory di lavoro è quella da cui si parte quando un
-\itindsub{pathname}{relativo} \textit{pathname} è espresso in forma relativa,
-dove il ``\textsl{relativa}'' fa riferimento appunto a questa directory.
+La directory di lavoro è quella da cui si parte quando un \textit{pathname} è
+espresso in forma relativa, dove il ``\textsl{relativa}'' fa riferimento
+appunto a questa directory.
 
 Quando un utente effettua il login, questa directory viene impostata alla
 \textit{home directory} del suo account. Il comando \cmd{cd} della shell
@@ -2747,8 +2749,8 @@ avere problemi di compatibilità con eventuali ulteriori estensioni.
 
 Le macro sono definite nel file \headfile{sys/sysmacros.h},\footnote{se si usa
   la \acr{glibc} dalla versione 2.3.3 queste macro sono degli alias alle
-  versioni specifiche di questa libreria, \macro{gnu\_dev\_major},
-  \macro{gnu\_dev\_minor} e \macro{gnu\_dev\_makedev} che si possono usare
+  versioni specifiche di questa libreria, \macrod{gnu\_dev\_major},
+  \macrod{gnu\_dev\_minor} e \macrod{gnu\_dev\_makedev} che si possono usare
   direttamente, al costo di una minore portabilità.} che viene automaticamente
 incluso quando si include \headfile{sys/types.h}. Si possono pertanto ottenere
 i valori del \textit{major number} e \textit{minor number} di un dispositivo
@@ -2758,9 +2760,9 @@ rispettivamente con le macro \macro{major} e \macro{minor}:
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{sys/types.h}
-\fdecl{int \macro{major}(dev\_t dev)}
+\fdecl{int \macrod{major}(dev\_t dev)}
 \fdesc{Restituisce il \textit{major number} del dispositivo \param{dev}.}
-\fdecl{int \macro{minor}(dev\_t dev)}
+\fdecl{int \macrod{minor}(dev\_t dev)}
 \fdesc{Restituisce il \textit{minor number} del dispositivo \param{dev}.}  
 } 
 \end{funcbox}
@@ -2774,7 +2776,7 @@ macro \macro{makedev}:
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{sys/types.h}
-\fdecl{dev\_t \macro{makedev}(int major, int minor)}
+\fdecl{dev\_t \macrod{makedev}(int major, int minor)}
 \fdesc{Dati \textit{major number} e \textit{minor number} restituisce
   l'identificativo di un dispositivo.} 
 } 
@@ -2855,20 +2857,20 @@ la prima di queste funzioni create a questo scopo era
 La funzione restituisce il puntatore ad una stringa contente un nome di file
 valido e non esistente al momento dell'invocazione. Se si è passato come
 argomento \param{string} un puntatore non nullo ad un buffer di caratteri
-questo deve essere di dimensione \const{L\_tmpnam} ed il nome generato vi
+questo deve essere di dimensione \constd{L\_tmpnam} 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 \const{TMP\_MAX} volte, limite oltre il quale il comportamento è
+massimo di \constd{TMP\_MAX} volte, limite oltre il quale il comportamento è
 indefinito. Al nome viene automaticamente aggiunto come prefisso la directory
-specificata dalla costante \const{P\_tmpdir}.\footnote{le costanti
+specificata dalla costante \constd{P\_tmpdir}.\footnote{le costanti
   \const{L\_tmpnam}, \const{P\_tmpdir} e \const{TMP\_MAX} sono definite in
   \headfile{stdio.h}.}
 
-Di questa funzione esiste una versione \ rientrante,
-\funcm{tmpnam\_r}, che non fa nulla quando si passa \val{NULL} come argomento.
-Una funzione simile, \funcd{tempnam}, permette di specificare un prefisso per
-il file esplicitamente, il suo prototipo è:
+Di questa funzione esiste una versione rientrante, \funcm{tmpnam\_r}, che non
+fa nulla quando si passa \val{NULL} come argomento.  Una funzione simile,
+\funcd{tempnam}, permette di specificare un prefisso per il file
+esplicitamente, il suo prototipo è:
 
 \begin{funcproto}{
 \fhead{stdio.h}
@@ -2881,11 +2883,11 @@ il file esplicitamente, il suo prototipo è:
 \end{funcproto}
 
 La funzione alloca con \code{malloc} la stringa in cui restituisce il nome,
-per cui è sempre \ rientrante, occorre però
-ricordarsi di disallocare con \code{free} il puntatore che restituisce.
-L'argomento \param{pfx} specifica un prefisso di massimo 5 caratteri per il
-nome provvisorio. La funzione assegna come directory per il file temporaneo,
-verificando che esista e sia accessibile, la prima valida fra le seguenti:
+per cui è sempre rientrante, occorre però ricordarsi di disallocare con
+\code{free} il puntatore che restituisce.  L'argomento \param{pfx} specifica
+un prefisso di massimo 5 caratteri per il nome provvisorio. La funzione
+assegna come directory per il file temporaneo, verificando che esista e sia
+accessibile, la prima valida fra le seguenti:
 \begin{itemize*}
 \item la variabile di ambiente \envvar{TMPDIR} (non ha effetto se non è
   definita o se il programma chiamante è \acr{suid} o \acr{sgid}, vedi
@@ -3185,13 +3187,13 @@ tipo di file in maniera standardizzata.
     \textbf{Macro} & \textbf{Tipo del file} \\
     \hline
     \hline
-    \macro{S\_ISREG}\texttt{(m)}  & File normale.\\
-    \macro{S\_ISDIR}\texttt{(m)}  & Directory.\\
-    \macro{S\_ISCHR}\texttt{(m)}  & Dispositivo a caratteri.\\
-    \macro{S\_ISBLK}\texttt{(m)}  & Dispositivo a blocchi.\\
-    \macro{S\_ISFIFO}\texttt{(m)} & Fifo.\\
-    \macro{S\_ISLNK}\texttt{(m)}  & Collegamento simbolico.\\
-    \macro{S\_ISSOCK}\texttt{(m)} & Socket.\\
+    \macrod{S\_ISREG}\texttt{(m)}  & File normale.\\
+    \macrod{S\_ISDIR}\texttt{(m)}  & Directory.\\
+    \macrod{S\_ISCHR}\texttt{(m)}  & Dispositivo a caratteri.\\
+    \macrod{S\_ISBLK}\texttt{(m)}  & Dispositivo a blocchi.\\
+    \macrod{S\_ISFIFO}\texttt{(m)} & Fifo.\\
+    \macrod{S\_ISLNK}\texttt{(m)}  & Collegamento simbolico.\\
+    \macrod{S\_ISSOCK}\texttt{(m)} & Socket.\\
     \hline    
   \end{tabular}
   \caption{Macro per i tipi di file (definite in \headfile{sys/stat.h}).}
@@ -3215,36 +3217,36 @@ come argomento il valore di \var{st\_mode}.
     \textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{S\_IFMT}   &  0170000 & Maschera per i bit del tipo di file.\\
-    \const{S\_IFSOCK} &  0140000 & Socket.\\
-    \const{S\_IFLNK}  &  0120000 & Collegamento simbolico.\\
-    \const{S\_IFREG}  &  0100000 & File regolare.\\ 
-    \const{S\_IFBLK}  &  0060000 & Dispositivo a blocchi.\\
-    \const{S\_IFDIR}  &  0040000 & Directory.\\
-    \const{S\_IFCHR}  &  0020000 & Dispositivo a caratteri.\\
-    \const{S\_IFIFO}  &  0010000 & Fifo.\\
+    \constd{S\_IFMT}   &  0170000 & Maschera per i bit del tipo di file.\\
+    \constd{S\_IFSOCK} &  0140000 & Socket.\\
+    \constd{S\_IFLNK}  &  0120000 & Collegamento simbolico.\\
+    \constd{S\_IFREG}  &  0100000 & File regolare.\\ 
+    \constd{S\_IFBLK}  &  0060000 & Dispositivo a blocchi.\\
+    \constd{S\_IFDIR}  &  0040000 & Directory.\\
+    \constd{S\_IFCHR}  &  0020000 & Dispositivo a caratteri.\\
+    \constd{S\_IFIFO}  &  0010000 & Fifo.\\
     \hline
-    \const{S\_ISUID}  &  0004000 & Set user ID (\acr{suid}) bit, vedi
+    \constd{S\_ISUID}  &  0004000 & Set user ID (\acr{suid}) bit, vedi
                                    sez.~\ref{sec:file_special_perm}).\\
-    \const{S\_ISGID}  &  0002000 & Set group ID (\acr{sgid}) bit, vedi
+    \constd{S\_ISGID}  &  0002000 & Set group ID (\acr{sgid}) bit, vedi
                                    sez.~\ref{sec:file_special_perm}).\\
-    \const{S\_ISVTX}  &  0001000 & \acr{Sticky} bit, vedi
+    \constd{S\_ISVTX}  &  0001000 & \acr{Sticky} bit, vedi
                                    sez.~\ref{sec:file_special_perm}).\\
     \hline
-    \const{S\_IRWXU}  &  00700   & Maschera 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.\\
+    \constd{S\_IRWXU}  &  00700   & Maschera per i permessi del proprietario.\\
+    \constd{S\_IRUSR}  &  00400   & Il proprietario ha permesso di lettura.\\
+    \constd{S\_IWUSR}  &  00200   & Il proprietario ha permesso di scrittura.\\
+    \constd{S\_IXUSR}  &  00100   & Il proprietario ha permesso di esecuzione.\\
     \hline
-    \const{S\_IRWXG}  &  00070   & Maschera 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.\\
+    \constd{S\_IRWXG}  &  00070   & Maschera per i permessi del gruppo.\\
+    \constd{S\_IRGRP}  &  00040   & Il gruppo ha permesso di lettura.\\
+    \constd{S\_IWGRP}  &  00020   & Il gruppo ha permesso di scrittura.\\
+    \constd{S\_IXGRP}  &  00010   & Il gruppo ha permesso di esecuzione.\\
     \hline
-    \const{S\_IRWXO}  &  00007   & Maschera 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.\\
+    \constd{S\_IRWXO}  &  00007   & Maschera per i permessi di tutti gli altri\\
+    \constd{S\_IROTH}  &  00004   & Gli altri hanno permesso di lettura.\\
+    \constd{S\_IWOTH}  &  00002   & Gli altri hanno permesso di esecuzione.\\
+    \constd{S\_IXOTH}  &  00001   & Gli altri hanno permesso di esecuzione.\\
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit che compongono il campo
@@ -3777,8 +3779,8 @@ tempo di ultimo accesso ed il secondo quello di ultima modifica, e se si usa
 il valore \val{NULL} verrà impostato il tempo corrente sia per l'ultimo
 accesso che per l'ultima modifica. Nei singoli elementi di \param{times} si
 possono inoltre utilizzare due valori speciali per il campo \var{tv\_nsec}:
-con \const{UTIME\_NOW} si richiede l'uso del tempo corrente, mentre con
-\const{UTIME\_OMIT} si richiede di non impostare il tempo. Si può così
+con \constd{UTIME\_NOW} si richiede l'uso del tempo corrente, mentre con
+\constd{UTIME\_OMIT} si richiede di non impostare il tempo. Si può così
 aggiornare in maniera specifica soltanto uno fra il tempo di ultimo accesso e
 quello di ultima modifica. Quando si usa uno di questi valori speciali per
 \var{tv\_nsec} il corrispondente valore di \var{tv\_sec} viene ignorato.
@@ -3799,13 +3801,13 @@ partire dalla versione 2.6.\footnote{in precedenza, a partire dal kernel
 seconda supporta invece, rispetto ad \func{utimes}, una sintassi più complessa
 che consente una indicazione sicura del file su cui operare specificando la
 directory su cui si trova tramite il file descriptor \param{dirfd} ed il suo
-nome come \itindsub{pathname}{relativo} \textit{pathname relativo}
-in \param{pathname}.\footnote{su Linux solo \func{utimensat} è una
-  \textit{system call} e \func{futimens} è una funzione di libreria, infatti
-  se \param{pathname} è \var{NULL} \param{dirfd} viene considerato un file
-  descriptor ordinario e il cambiamento del tempo applicato al file
-  sottostante, qualunque esso sia, per cui \code{futimens(fd, times}) è del
-  tutto equivalente a \code{utimensat(fd, NULL, times, 0)}.}
+nome come \textit{pathname relativo} in \param{pathname}.\footnote{su Linux
+  solo \func{utimensat} è una \textit{system call} e \func{futimens} è una
+  funzione di libreria, infatti se \param{pathname} è \var{NULL} \param{dirfd}
+  viene considerato un file descriptor ordinario e il cambiamento del tempo
+  applicato al file sottostante, qualunque esso sia, per cui
+  \code{futimens(fd, times}) è del tutto equivalente a \code{utimensat(fd,
+    NULL, times, 0)}.}
 
 Torneremo su questa sintassi e sulla sua motivazione in
 sez.~\ref{sec:file_openat}, quando tratteremo tutte le altre funzioni (le
@@ -3917,17 +3919,17 @@ in tab.~\ref{tab:file_bit_perm}.
     \textbf{\var{st\_mode}} bit & \textbf{Significato} \\
     \hline 
     \hline 
-    \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.\\ 
+    \constd{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
+    \constd{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
+    \constd{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\ 
     \hline            
-    \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.\\
+    \constd{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
+    \constd{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
+    \constd{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
     \hline            
-    \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.\\
+    \constd{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
+    \constd{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
+    \constd{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
     \hline              
   \end{tabular}
   \caption{I bit dei permessi di accesso ai file, come definiti in 
@@ -4280,10 +4282,10 @@ controllati sono disponibili.
     \textbf{\param{mode}} & \textbf{Significato} \\
     \hline
     \hline
-    \const{R\_OK} & Verifica il permesso di lettura. \\
-    \const{W\_OK} & Verifica il permesso di scrittura. \\
-    \const{X\_OK} & Verifica il permesso di esecuzione. \\
-    \const{F\_OK} & Verifica l'esistenza del file. \\
+    \constd{R\_OK} & Verifica il permesso di lettura. \\
+    \constd{W\_OK} & Verifica il permesso di scrittura. \\
+    \constd{X\_OK} & Verifica il permesso di esecuzione. \\
+    \constd{F\_OK} & Verifica l'esistenza del file. \\
     \hline
   \end{tabular}
   \caption{Valori possibili per l'argomento \param{mode} della funzione 
@@ -4354,24 +4356,24 @@ file.
     \textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{S\_ISUID} & 04000 & Set user ID  bit.\\
-    \const{S\_ISGID} & 02000 & Set group ID bit.\\
-    \const{S\_ISVTX} & 01000 & Sticky bit.\\
+    \constd{S\_ISUID} & 04000 & Set user ID  bit.\\
+    \constd{S\_ISGID} & 02000 & Set group ID bit.\\
+    \constd{S\_ISVTX} & 01000 & Sticky bit.\\
     \hline
-    \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.\\
+    \constd{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
+    \constd{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
+    \constd{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
+    \constd{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
     \hline
-    \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.\\
+    \constd{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
+    \constd{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
+    \constd{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
+    \constd{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
     \hline
-    \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.\\
+    \constd{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
+    \constd{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
+    \constd{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
+    \constd{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
     \hline
   \end{tabular}
   \caption{Valori delle costanti usate per indicare i vari bit di
@@ -4990,9 +4992,9 @@ Il valore che verrà assegnato all'attributo dovrà essere preparato nel buffer
 puntato da \param{value}, e la sua dimensione totale (in byte) sarà indicata
 dall'argomento \param{size}. Infine l'argomento \param{flag} consente di
 controllare le modalità di sovrascrittura dell'attributo esteso, esso può
-prendere due valori: con \const{XATTR\_REPLACE} si richiede che l'attributo
+prendere due valori: con \constd{XATTR\_REPLACE} si richiede che l'attributo
 esista, nel qual caso verrà sovrascritto, altrimenti si avrà errore, mentre
-con \const{XATTR\_CREATE} si richiede che l'attributo non esista, nel qual
+con \constd{XATTR\_CREATE} si richiede che l'attributo non esista, nel qual
 caso verrà creato, altrimenti si avrà errore ed il valore attuale non sarà
 modificato.  Utilizzando per \param{flag} un valore nullo l'attributo verrà
 modificato se è già presente, o creato se non c'è.
@@ -5151,21 +5153,21 @@ la capacità \const{CAP\_FOWNER}.
     \textbf{Tipo} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{ACL\_USER\_OBJ} & Voce che contiene i diritti di accesso del
+    \constd{ACL\_USER\_OBJ}& Voce che contiene i diritti di accesso del
                              proprietario del file.\\
-    \const{ACL\_USER}      & Voce che contiene i diritti di accesso per
+    \constd{ACL\_USER}     & Voce che contiene i diritti di accesso per
                              l'utente indicato dal rispettivo
                              qualificatore.\\  
-    \const{ACL\_GROUP\_OBJ}& Voce che contiene i diritti di accesso del
+    \constd{ACL\_GROUP\_OBJ}&Voce che contiene i diritti di accesso del
                              gruppo proprietario del file.\\
-    \const{ACL\_GROUP}     & Voce che contiene i diritti di accesso per
+    \constd{ACL\_GROUP}    & Voce che contiene i diritti di accesso per
                              il gruppo indicato dal rispettivo
                              qualificatore.\\
-    \const{ACL\_MASK}      & Voce che contiene la maschera dei massimi
+    \constd{ACL\_MASK}     & Voce che contiene la maschera dei massimi
                              permessi di accesso che possono essere garantiti
                              da voci del tipo \const{ACL\_USER},
                              \const{ACL\_GROUP} e \const{ACL\_GROUP\_OBJ}.\\
-    \const{ACL\_OTHER}     & Voce che contiene i diritti di accesso di chi
+    \constd{ACL\_OTHER}    & Voce che contiene i diritti di accesso di chi
                              non corrisponde a nessuna altra voce dell'ACL.\\
     \hline
   \end{tabular}
@@ -5480,8 +5482,8 @@ tab.~\ref{tab:acl_type}.
     \textbf{Tipo} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{ACL\_TYPE\_ACCESS} & Indica una ACL di accesso.\\
-    \const{ACL\_TYPE\_DEFAULT}& Indica una ACL di default.\\  
+    \constd{ACL\_TYPE\_ACCESS} & Indica una ACL di accesso.\\
+    \constd{ACL\_TYPE\_DEFAULT}& Indica una ACL di default.\\  
     \hline
   \end{tabular}
   \caption{Le costanti che identificano il tipo di ACL.}
@@ -5640,21 +5642,21 @@ tab.~\ref{tab:acl_to_text_options}.
     \textbf{Tipo} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{TEXT\_ABBREVIATE}     & Stampa le voci in forma abbreviata.\\
-    \const{TEXT\_NUMERIC\_IDS}   & non effettua la risoluzione numerica di
+    \constd{TEXT\_ABBREVIATE}    & Stampa le voci in forma abbreviata.\\
+    \constd{TEXT\_NUMERIC\_IDS}  & non effettua la risoluzione numerica di
                                    \ids{UID} e \ids{GID}.\\
-    \const{TEXT\_SOME\_EFFECTIVE}& Per ciascuna voce che contiene permessi che
+    \constd{TEXT\_SOME\_EFFECTIVE}&Per ciascuna voce che contiene permessi che
                                    vengono eliminati dalla \const{ACL\_MASK}
                                    viene generato un commento con i permessi 
                                    effettivamente risultanti; il commento è
                                    separato con un tabulatore.\\
-    \const{TEXT\_ALL\_EFFECTIVE} & Viene generato un commento con i permessi
+    \constd{TEXT\_ALL\_EFFECTIVE}& Viene generato un commento con i permessi
                                    effettivi per ciascuna voce che contiene
                                    permessi citati nella \const{ACL\_MASK},
                                    anche quando questi non vengono modificati
                                    da essa; il commento è separato con un
                                    tabulatore.\\
-    \const{TEXT\_SMART\_INDENT}  & Da usare in combinazione con le precedenti
+    \constd{TEXT\_SMART\_INDENT} & Da usare in combinazione con le precedenti
                                    opzioni \const{TEXT\_SOME\_EFFECTIVE} e
                                    \const{TEXT\_ALL\_EFFECTIVE}, aumenta
                                    automaticamente il numero di spaziatori
@@ -6021,7 +6023,7 @@ macro \macro{QCMD}:
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{sys/quota.h}
-\fdecl{int \macro{QCMD}(subcmd,type)}
+\fdecl{int \macrod{QCMD}(subcmd,type)}
 \fdesc{Imposta il comando \param{subcmd} per il tipo di quote (utente o
   gruppo) \param{type}.}
 } 
@@ -6042,7 +6044,7 @@ essere sempre definito ed assegnato ad uno fra i due valori \const{USRQUOTA} o
     \textbf{Comando} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
+    \constd{Q\_QUOTAON} & Attiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, si deve passare
                           in \param{addr} il \textit{pathname} al file che
                           mantiene le quote, che deve esistere, e \param{id}
@@ -6050,11 +6052,11 @@ essere sempre definito ed assegnato ad uno fra i due valori \const{USRQUOTA} o
                           valori di tab.~\ref{tab:quotactl_id_format};
                           l'operazione richiede i privilegi di
                           amministratore.\\
-    \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
+    \constd{Q\_QUOTAOFF}& Disattiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, \param{id}
                           e \param{addr} vengono ignorati; l'operazione
                           richiede i privilegi di amministratore.\\  
-    \const{Q\_GETQUOTA} & Legge i limiti ed i valori correnti delle quote nel
+    \constd{Q\_GETQUOTA}& Legge i limiti ed i valori correnti delle quote nel
                           filesystem indicato da \param{dev} per l'utente o
                           il gruppo specificato da \param{id}; si devono avere
                           i privilegi di amministratore per leggere i dati
@@ -6062,33 +6064,33 @@ essere sempre definito ed assegnato ad uno fra i due valori \const{USRQUOTA} o
                           parte, il risultato viene restituito in una struttura
                           \struct{dqblk} all'indirizzo indicato
                           da \param{addr}.\\
-    \const{Q\_SETQUOTA} & Imposta i limiti per le quote nel filesystem
+    \constd{Q\_SETQUOTA}& Imposta i limiti per le quote nel filesystem
                           indicato da \param{dev} per l'utente o il gruppo
                           specificato da \param{id} secondo i valori ottenuti
                           dalla struttura \struct{dqblk} puntata
                           da \param{addr}; l'operazione richiede i privilegi
                           di amministratore.\\ 
-    \const{Q\_GETINFO}  & Legge le informazioni (in sostanza i \textit{grace
+    \constd{Q\_GETINFO} & Legge le informazioni (in sostanza i \textit{grace
                             time}) delle quote del filesystem indicato
                           da \param{dev} sulla struttura \struct{dqinfo} 
                           puntata da \param{addr}, \param{id} viene ignorato.\\
-    \const{Q\_SETINFO}  & Imposta le informazioni delle quote del filesystem
+    \constd{Q\_SETINFO} & Imposta le informazioni delle quote del filesystem
                           indicato da \param{dev} come ottenuti dalla
                           struttura \struct{dqinfo} puntata
                           da \param{addr}, \param{id} viene ignorato;  
                           l'operazione richiede i privilegi di amministratore.\\
-    \const{Q\_GETFMT}   & Richiede il valore identificativo (quello di
+    \constd{Q\_GETFMT}  & Richiede il valore identificativo (quello di
                           tab.~\ref{tab:quotactl_id_format}) per il formato
                           delle quote attualmente in uso sul filesystem
                           indicato da \param{dev}, che sarà memorizzato
                           sul buffer di 4 byte puntato da \param{addr}.\\
-    \const{Q\_SYNC}     & Aggiorna la copia su disco dei dati delle quote del
+    \constd{Q\_SYNC}    & Aggiorna la copia su disco dei dati delle quote del
                           filesystem indicato da \param{dev}; in questo
                           caso \param{dev} può anche essere \val{NULL} nel
                           qual caso verranno aggiornati i dati per tutti i
                           filesystem con quote attive, \param{id}
                           e \param{addr} vengono comunque ignorati.\\ 
-    \const{Q\_GETSTATS} & Ottiene statistiche ed altre informazioni generali 
+    \constd{Q\_GETSTATS}& Ottiene statistiche ed altre informazioni generali 
                           relative al sistema delle quote per il filesystem
                           indicato da \param{dev}, richiede che si
                           passi come argomento \param{addr} l'indirizzo di una
@@ -6164,27 +6166,25 @@ ciascuna di esse ed i campi a cui fanno riferimento.
     \textbf{Costante} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{QIF\_BLIMITS}& Limiti sui blocchi di 
-                          spazio disco (\val{dqb\_bhardlimit} e
-                          \val{dqb\_bsoftlimit}).\\
-    \const{QIF\_SPACE}  & Uso corrente
-                          dello spazio disco (\val{dqb\_curspace}).\\
-    \const{QIF\_ILIMITS}& Limiti sugli \textit{inode}
-                          (\val{dqb\_ihardlimit} e \val{dqb\_isoftlimit}).\\
-    \const{QIF\_INODES} & Uso corrente
-                          degli \textit{inode} (\val{dqb\_curinodes}).\\
-    \const{QIF\_BTIME}  & Tempo di
-                          sforamento del \textit{soft limit} sul numero di
-                          blocchi (\val{dqb\_btime}).\\
-    \const{QIF\_ITIME}  & Tempo di sforamento del \textit{soft limit} sul
-                          numero di \textit{inode} (\val{dqb\_itime}).\\ 
-    \const{QIF\_LIMITS} & L'insieme di \const{QIF\_BLIMITS} e
-                          \const{QIF\_ILIMITS}.\\
-    \const{QIF\_USAGE}  & L'insieme di \const{QIF\_SPACE} e
-                          \const{QIF\_INODES}.\\
-    \const{QIF\_TIMES}  & L'insieme di \const{QIF\_BTIME} e
-                          \const{QIF\_ITIME}.\\ 
-    \const{QIF\_ALL}    & Tutti i precedenti.\\
+    \constd{QIF\_BLIMITS}& Limiti sui blocchi di spazio disco
+                           (\val{dqb\_bhardlimit} e \val{dqb\_bsoftlimit}).\\
+    \constd{QIF\_SPACE}  & Uso corrente dello spazio disco
+                           (\val{dqb\_curspace}).\\
+    \constd{QIF\_ILIMITS}& Limiti sugli \textit{inode}
+                           (\val{dqb\_ihardlimit} e \val{dqb\_isoftlimit}).\\
+    \constd{QIF\_INODES} & Uso corrente degli \textit{inode}
+                           (\val{dqb\_curinodes}).\\
+    \constd{QIF\_BTIME}  & Tempo di sforamento del \textit{soft limit} sul
+                           numero di blocchi (\val{dqb\_btime}).\\
+    \constd{QIF\_ITIME}  & Tempo di sforamento del \textit{soft limit} sul
+                           numero di \textit{inode} (\val{dqb\_itime}).\\ 
+    \constd{QIF\_LIMITS} & L'insieme di \const{QIF\_BLIMITS} e
+                           \const{QIF\_ILIMITS}.\\
+    \constd{QIF\_USAGE}  & L'insieme di \const{QIF\_SPACE} e
+                           \const{QIF\_INODES}.\\
+    \constd{QIF\_TIMES}  & L'insieme di \const{QIF\_BTIME} e
+                           \const{QIF\_ITIME}.\\ 
+    \constd{QIF\_ALL}    & Tutti i precedenti.\\
     \hline
   \end{tabular}
   \caption{Costanti per il campo \val{dqb\_valid} di \struct{dqblk}.} 
@@ -6219,21 +6219,19 @@ identificate tramite le costanti di tab.~\ref{tab:quotactl_id_format}.
     \textbf{Identificatore} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{QFMT\_VFS\_OLD}& Il vecchio (ed obsoleto) formato delle quote.\\
-    \const{QFMT\_VFS\_V0} & La versione 0 usata dal VFS di Linux, supporta
-                            \ids{UID} e \ids{GID} a 32 bit e limiti fino a
-                            $2^{42}$ byte e $2^{32}$ file.\\
-    \const{QFMT\_VFS\_V1} & La versione 1 usata dal VFS di Linux, supporta
-                            \ids{UID} e \ids{GID} a 32 bit e limiti fino a
-                            $2^{64}$ byte e $2^{64}$ file.\\
+    \constd{QFMT\_VFS\_OLD}& Il vecchio (ed obsoleto) formato delle quote.\\
+    \constd{QFMT\_VFS\_V0} & La versione 0 usata dal VFS di Linux, supporta
+                             \ids{UID} e \ids{GID} a 32 bit e limiti fino a
+                             $2^{42}$ byte e $2^{32}$ file.\\
+    \constd{QFMT\_VFS\_V1} & La versione 1 usata dal VFS di Linux, supporta
+                             \ids{UID} e \ids{GID} a 32 bit e limiti fino a
+                             $2^{64}$ byte e $2^{64}$ file.\\
     \hline
   \end{tabular}
   \caption{Valori di identificazione del formato delle quote.} 
   \label{tab:quotactl_id_format}
 \end{table}
 
-
-
 Altre due operazioni che necessitano di ulteriori spiegazioni sono
 \const{Q\_GETINFO} e \const{Q\_SETINFO}, che consentono di ottenere i dati
 relativi alle impostazioni delle altre proprietà delle quote, che al momento
@@ -6267,12 +6265,12 @@ significato di ciascuna di esse ed i campi a cui fanno riferimento.
     \textbf{Costante} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{IIF\_BGRACE}& Il \textit{grace period} per i blocchi
+    \constd{IIF\_BGRACE}& Il \textit{grace period} per i blocchi
                          (\val{dqi\_bgrace}).\\
-    \const{IIF\_IGRACE}& Il \textit{grace period} per gli \textit{inode} 
+    \constd{IIF\_IGRACE}& Il \textit{grace period} per gli \textit{inode} 
                          (\val{dqi\_igrace}).\\ 
-    \const{IIF\_FLAGS} & I flag delle quote (\val{dqi\_flags}) (inusato ?).\\
-    \const{IIF\_ALL}   & Tutti i precedenti.\\
+    \constd{IIF\_FLAGS} & I flag delle quote (\val{dqi\_flags}) (inusato ?).\\
+    \constd{IIF\_ALL}   & Tutti i precedenti.\\
     \hline
   \end{tabular}
   \caption{Costanti per il campo \val{dqi\_valid} di \struct{dqinfo}.} 
@@ -6689,7 +6687,7 @@ cancellato il flag \const{SECURE\_KEEP\_CAPS}.
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{SECURE\_KEEP\_CAPS}& Il processo non subisce la cancellazione delle
+    \constd{SECURE\_KEEP\_CAPS}&Il processo non subisce la cancellazione delle
                                 sue \textit{capabilities} quando tutti i suoi
                                 \ids{UID} passano ad un valore non
                                 nullo (regola di compatibilità per il cambio
@@ -6697,14 +6695,14 @@ cancellato il flag \const{SECURE\_KEEP\_CAPS}.
                                 elenco), sostituisce il precedente uso
                                 dell'operazione \const{PR\_SET\_KEEPCAPS} di
                                 \func{prctl}.\\
-    \const{SECURE\_NO\_SETUID\_FIXUP}&Il processo non subisce le modifiche
+    \constd{SECURE\_NO\_SETUID\_FIXUP}&Il processo non subisce le modifiche
                                 delle sue \textit{capabilities} nel passaggio
                                 da nullo a non nullo degli \ids{UID}
                                 dei gruppi \textit{effective} e
                                 \textit{file system} (regole di compatibilità
                                 per il cambio di \ids{UID} nn.~1 e 2 del
                                 precedente elenco).\\
-    \const{SECURE\_NOROOT}    & Il processo non assume nessuna capacità
+    \constd{SECURE\_NOROOT}   & Il processo non assume nessuna capacità
                                 aggiuntiva quando esegue un programma, anche
                                 se ha \ids{UID} nullo o il programma ha
                                 il \acr{suid} bit attivo ed appartiene
@@ -6722,10 +6720,10 @@ A ciascuno dei flag di tab.~\ref{tab:securebits_values} è inoltre abbinato un
 corrispondente flag di blocco, identificato da una costante omonima con
 l'estensione \texttt{\_LOCKED}, la cui attivazione è irreversibile ed ha
 l'effetto di rendere permanente l'impostazione corrente del corrispondente
-flag ordinario; in sostanza con \const{SECURE\_KEEP\_CAPS\_LOCKED} si rende
+flag ordinario; in sostanza con \constd{SECURE\_KEEP\_CAPS\_LOCKED} si rende
 non più modificabile \const{SECURE\_KEEP\_CAPS}, ed analogamente avviene con
-\const{SECURE\_NO\_SETUID\_FIXUP\_LOCKED} per
-\const{SECURE\_NO\_SETUID\_FIXUP} e con \const{SECURE\_NOROOT\_LOCKED} per
+\constd{SECURE\_NO\_SETUID\_FIXUP\_LOCKED} per
+\const{SECURE\_NO\_SETUID\_FIXUP} e con \constd{SECURE\_NOROOT\_LOCKED} per
 \const{SECURE\_NOROOT}.
 
 Per l'impostazione di questi flag sono state predisposte due specifiche
@@ -6786,20 +6784,20 @@ opportuno dettagliare maggiormente.
 %
 % POSIX-draft defined capabilities.
 %
-    \const{CAP\_AUDIT\_CONTROL}& Abilitare e disabilitare il
+    \constd{CAP\_AUDIT\_CONTROL}& Abilitare e disabilitare il
                               controllo dell'auditing (dal kernel 2.6.11).\\ 
-    \const{CAP\_AUDIT\_WRITE}&Scrivere dati nel giornale di
+    \constd{CAP\_AUDIT\_WRITE}&Scrivere dati nel giornale di
                               auditing del kernel (dal kernel 2.6.11).\\ 
     % TODO verificare questa roba dell'auditing
-    \const{CAP\_BLOCK\_SUSPEND}&Utilizzare funzionalità che possono bloccare 
+    \constd{CAP\_BLOCK\_SUSPEND}&Utilizzare funzionalità che possono bloccare 
                               la sospensione del sistema (dal kernel 3.5).\\ 
-    \const{CAP\_CHOWN}      & Cambiare proprietario e gruppo
+    \constd{CAP\_CHOWN}     & Cambiare proprietario e gruppo
                               proprietario di un file (vedi
                               sez.~\ref{sec:file_ownership_management}).\\
-    \const{CAP\_DAC\_OVERRIDE}& Evitare il controllo dei
-                              permessi di lettura, scrittura ed esecuzione dei
-                              file, (vedi sez.~\ref{sec:file_access_control}).\\
-    \const{CAP\_DAC\_READ\_SEARCH}& Evitare il controllo dei
+    \constd{CAP\_DAC\_OVERRIDE}& Evitare il controllo dei
+                               permessi di lettura, scrittura ed esecuzione dei
+                               file, (vedi sez.~\ref{sec:file_access_control}).\\ 
+    \constd{CAP\_DAC\_READ\_SEARCH}& Evitare il controllo dei
                               permessi di lettura ed esecuzione per
                               le directory (vedi
                               sez.~\ref{sec:file_access_control}).\\
@@ -6807,7 +6805,7 @@ opportuno dettagliare maggiormente.
                               per tutte le operazioni privilegiate non coperte
                               dalle precedenti \const{CAP\_DAC\_OVERRIDE} e
                               \const{CAP\_DAC\_READ\_SEARCH}.\\
-    \const{CAP\_FSETID}     & Evitare la cancellazione automatica dei bit
+    \constd{CAP\_FSETID}    & Evitare la cancellazione automatica dei bit
                               \acr{suid} e \acr{sgid} quando un file
                               per i quali sono impostati viene modificato da
                               un processo senza questa capacità e la capacità
@@ -6815,16 +6813,16 @@ opportuno dettagliare maggiormente.
                               quando questo è relativo ad un gruppo cui non si
                               appartiene (vedi
                               sez.~\ref{sec:file_perm_management}).\\ 
-    \const{CAP\_KILL}       & Mandare segnali a qualunque
+    \constd{CAP\_KILL}      & Mandare segnali a qualunque
                               processo (vedi sez.~\ref{sec:sig_kill_raise}).\\
-    \const{CAP\_SETFCAP}    & Impostare le \textit{capabilities} di un file
+    \constd{CAP\_SETFCAP}   & Impostare le \textit{capabilities} di un file
                               (dal kernel 2.6.24).\\ 
-    \const{CAP\_SETGID}     & Manipolare i group ID dei
+    \constd{CAP\_SETGID}    & Manipolare i group ID dei
                               processi, sia il principale che i supplementari,
                               (vedi sez.~\ref{sec:proc_setgroups}) che quelli
                               trasmessi tramite i socket \textit{unix domain}
                               (vedi sez.~\ref{sec:unix_socket}).\\
-    \const{CAP\_SETUID}     & Manipolare gli user ID del
+    \constd{CAP\_SETUID}    & Manipolare gli user ID del
                               processo (vedi sez.~\ref{sec:proc_setuid}) e di
                               trasmettere un user ID arbitrario nel passaggio
                               delle credenziali coi socket \textit{unix
@@ -6833,69 +6831,69 @@ opportuno dettagliare maggiormente.
 % Linux specific capabilities
 %
 \hline
-    \const{CAP\_IPC\_LOCK}  & Effettuare il \textit{memory locking} con le
+    \constd{CAP\_IPC\_LOCK} & Effettuare il \textit{memory locking} con le
                               funzioni \func{mlock}, \func{mlockall},
                               \func{shmctl}, \func{mmap} (vedi
                               sez.~\ref{sec:proc_mem_lock} e 
                               sez.~\ref{sec:file_memory_map}). \\ 
 % TODO verificare l'interazione con SHM_HUGETLB
-    \const{CAP\_IPC\_OWNER} & Evitare il controllo dei permessi
+    \constd{CAP\_IPC\_OWNER}& Evitare il controllo dei permessi
                               per le operazioni sugli oggetti di
                               intercomunicazione fra processi (vedi
                               sez.~\ref{sec:ipc_sysv}).\\  
-    \const{CAP\_LEASE}      & Creare dei \textit{file lease} (vedi
+    \constd{CAP\_LEASE}     & Creare dei \textit{file lease} (vedi
                               sez.~\ref{sec:file_asyncronous_lease})
                               pur non essendo proprietari del file (dal kernel
                               2.4).\\ 
-    \const{CAP\_LINUX\_IMMUTABLE}& Impostare sui file gli attributi 
-                              \textit{immutable} e \textit{append-only} (vedi
-                              sez.~\ref{sec:file_perm_overview}) se
-                              supportati.\\
-    \const{CAP\_MKNOD}      & Creare file di dispositivo con \func{mknod} (vedi
+    \constd{CAP\_LINUX\_IMMUTABLE}& Impostare sui file gli attributi 
+                             \textit{immutable} e \textit{append-only} (vedi
+                             sez.~\ref{sec:file_perm_overview}) se
+                             supportati.\\
+    \constd{CAP\_MAC\_ADMIN}& Amministrare il \textit{Mandatory
+                               Access Control} di \textit{Smack} (dal kernel
+                              2.6.25).\\
+    \constd{CAP\_MAC\_OVERRIDE}& Evitare il \textit{Mandatory
+                               Access Control} di \textit{Smack} (dal kernel
+                              2.6.25).\\   
+    \constd{CAP\_MKNOD}     & Creare file di dispositivo con \func{mknod} (vedi
                               sez.~\ref{sec:file_mknod}) (dal kernel 2.4).\\ 
     \const{CAP\_NET\_ADMIN} & Eseguire alcune operazioni
                               privilegiate sulla rete.\\
-    \const{CAP\_NET\_BIND\_SERVICE}& Porsi in ascolto su porte riservate (vedi 
+    \constd{CAP\_NET\_BIND\_SERVICE}& Porsi in ascolto su porte riservate (vedi 
                               sez.~\ref{sec:TCP_func_bind}).\\ 
-    \const{CAP\_NET\_BROADCAST}& Consentire l'uso di socket in
+    \constd{CAP\_NET\_BROADCAST}& Consentire l'uso di socket in
                               \textit{broadcast} e \textit{multicast}.\\ 
-    \const{CAP\_NET\_RAW}   & Usare socket \texttt{RAW} e \texttt{PACKET}
+    \constd{CAP\_NET\_RAW}  & Usare socket \texttt{RAW} e \texttt{PACKET}
                               (vedi sez.~\ref{sec:sock_type}).\\ 
     \const{CAP\_SETPCAP}    & Effettuare modifiche privilegiate alle
                               \textit{capabilities}.\\   
     \const{CAP\_SYS\_ADMIN} & Eseguire una serie di compiti amministrativi.\\
-    \const{CAP\_SYS\_BOOT}  & Eseguire un riavvio del sistema (vedi
+    \constd{CAP\_SYS\_BOOT} & Eseguire un riavvio del sistema (vedi
                               sez.~\ref{sec:sys_reboot}).\\ 
-    \const{CAP\_SYS\_CHROOT}& Eseguire la funzione \func{chroot} (vedi 
+    \constd{CAP\_SYS\_CHROOT}& Eseguire la funzione \func{chroot} (vedi 
                               sez.~\ref{sec:file_chroot}).\\
-    \const{CAP\_MAC\_ADMIN} & Amministrare il \textit{Mandatory
-                               Access Control} di \textit{Smack} (dal kernel
-                             2.6.25).\\
-    \const{CAP\_MAC\_OVERRIDE}& Evitare il \textit{Mandatory
-                               Access Control} di \textit{Smack} (dal kernel
-                             2.6.25).\\   
-    \const{CAP\_SYS\_MODULE}& Caricare e rimuovere moduli del kernel.\\ 
+    \constd{CAP\_SYS\_MODULE}& Caricare e rimuovere moduli del kernel.\\ 
     \const{CAP\_SYS\_NICE}  & Modificare le varie priorità dei processi (vedi 
                               sez.~\ref{sec:proc_priority}).\\
-    \const{CAP\_SYS\_PACCT} & Usare le funzioni di \textit{accounting} dei 
+    \constd{CAP\_SYS\_PACCT}& Usare le funzioni di \textit{accounting} dei 
                               processi (vedi
                               sez.~\ref{sec:sys_bsd_accounting}).\\  
-    \const{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con
+    \constd{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con
                               \func{ptrace} (vedi 
                               sez.~\ref{sec:process_ptrace}).\\
-    \const{CAP\_SYS\_RAWIO} & Operare sulle porte di I/O con \func{ioperm} e
+    \constd{CAP\_SYS\_RAWIO}& Operare sulle porte di I/O con \func{ioperm} e
                                \func{iopl} (vedi
                               sez.~\ref{sec:process_io_port}).\\
     \const{CAP\_SYS\_RESOURCE}& Superare le varie limitazioni sulle risorse.\\ 
-    \const{CAP\_SYS\_TIME}  & Modificare il tempo di sistema (vedi 
+    \constd{CAP\_SYS\_TIME} & Modificare il tempo di sistema (vedi 
                               sez.~\ref{sec:sys_time}).\\ 
-    \const{CAP\_SYS\_TTY\_CONFIG}&Simulare un \textit{hangup} della console,
+    \constd{CAP\_SYS\_TTY\_CONFIG}&Simulare un \textit{hangup} della console,
                               con la funzione \func{vhangup}.\\
-    \const{CAP\_SYSLOG}     & Gestire il buffer dei messaggi
+    \constd{CAP\_SYSLOG}    & Gestire il buffer dei messaggi
                               del kernel, (vedi sez.~\ref{sec:sess_daemon}),
                               introdotta dal kernel 2.6.38 come capacità
                               separata da \const{CAP\_SYS\_ADMIN}.\\
-    \const{CAP\_WAKE\_ALARM}& Usare i timer di tipo
+    \constd{CAP\_WAKE\_ALARM}&Usare i timer di tipo
                               \const{CLOCK\_BOOTTIME\_ALARM} e
                               \const{CLOCK\_REALTIME\_ALARM}, vedi
                               sez.~\ref{sec:sig_timer_adv} (dal kernel 3.0).\\  
@@ -6906,6 +6904,7 @@ opportuno dettagliare maggiormente.
 \label{tab:proc_capabilities}
 \end{table}
 
+\constbeg{CAP\_SETPCAP}
 
 Prima di dettagliare il significato della capacità più generiche, conviene
 però dedicare un discorso a parte a \const{CAP\_SETPCAP}, il cui significato è
@@ -6930,6 +6929,9 @@ processo di eliminare una capacità dal proprio \textit{bounding set} (con la
 conseguente impossibilità successiva di eseguire programmi con quella
 capacità), o di impostare i \textit{securebits} delle \textit{capabilities}.
 
+\constend{CAP\_SETPCAP}
+\constbeg{CAP\_FOWNER}
+
 La prima fra le capacità ``\textsl{ampie}'' che occorre dettagliare
 maggiormente è \const{CAP\_FOWNER}, che rimuove le restrizioni poste ad un
 processo che non ha la proprietà di un file in un vasto campo di
@@ -6946,6 +6948,9 @@ sez.~\ref{sec:file_special_perm}), la possibilità di impostare il flag di
 sez.~\ref{sec:file_open_close} e sez.~\ref{sec:file_fcntl_ioctl}) senza
 restrizioni.
 
+\constend{CAP\_FOWNER}
+\constbeg{CAP\_NET\_ADMIN}
+
 Una seconda capacità che copre diverse operazioni, in questo caso riguardanti
 la rete, è \const{CAP\_NET\_ADMIN}, che consente di impostare le opzioni
 privilegiate dei socket (vedi sez.~\ref{sec:sock_generic_options}), abilitare
@@ -6953,6 +6958,9 @@ il \textit{multicasting} (vedi sez.\ref{sec:sock_ipv4_options}), eseguire la
 configurazione delle interfacce di rete (vedi
 sez.~\ref{sec:sock_ioctl_netdevice}) ed impostare la tabella di instradamento.
 
+\constend{CAP\_NET\_ADMIN}
+\constbeg{CAP\_SYS\_ADMIN}
+
 Una terza \textit{capability} con vasto campo di applicazione è
 \const{CAP\_SYS\_ADMIN}, che copre una serie di operazioni amministrative,
 come impostare le quote disco (vedi sez.\ref{sec:disk_quota}), attivare e
@@ -6972,6 +6980,9 @@ sez.~\ref{sec:keyctl_management}), usare la funzione \func{lookup\_dcookie},
 usare \const{CLONE\_NEWNS} con \func{unshare} e \func{clone}, (vedi
 sez.~\ref{sec:process_clone}).
 
+\constend{CAP\_SYS\_ADMIN}
+\constbeg{CAP\_SYS\_NICE}
+
 Originariamente \const{CAP\_SYS\_NICE} riguardava soltanto la capacità di
 aumentare le priorità di esecuzione dei processi, come la diminuzione del
 valore di \textit{nice} (vedi sez.~\ref{sec:proc_sched_stand}), l'uso delle
@@ -6983,6 +6994,9 @@ alla memoria, essa viene a coprire anche la possibilità di assegnare priorità
 arbitrarie nell'accesso a disco (vedi sez.~\ref{sec:io_priority}) e nelle
 politiche di allocazione delle pagine di memoria ai nodi di un sistema NUMA.
 
+\constend{CAP\_SYS\_NICE}
+\constbeg{CAP\_SYS\_RESOURCE}
+
 Infine la \textit{capability} \const{CAP\_SYS\_RESOURCE} attiene alla
 possibilità di superare i limiti imposti sulle risorse di sistema, come usare
 lo spazio disco riservato all'amministratore sui filesystem che lo supportano,
@@ -6992,6 +7006,8 @@ risorse di un processo (vedi sez.~\ref{sec:sys_resource_limit}) e quelle sul
 numero di processi, ed i limiti sulle dimensioni dei messaggi delle code del
 SysV IPC (vedi sez.~\ref{sec:ipc_sysv_mq}).
 
+\constend{CAP\_SYS\_RESOURCE}
+
 Per la gestione delle \textit{capabilities} il kernel mette a disposizione due
 funzioni che permettono rispettivamente di leggere ed impostare i valori dei
 tre insiemi illustrati in precedenza. Queste due funzioni di sistema sono
@@ -7240,9 +7256,9 @@ tab.~\ref{tab:cap_set_identifier}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{CAP\_EFFECTIVE}  & Capacità dell'insieme \textsl{effettivo}.\\
-    \const{CAP\_PERMITTED}  & Capacità dell'insieme \textsl{permesso}.\\ 
-    \const{CAP\_INHERITABLE}& Capacità dell'insieme \textsl{ereditabile}.\\
+    \constd{CAP\_EFFECTIVE}  & Capacità dell'insieme \textsl{effettivo}.\\
+    \constd{CAP\_PERMITTED}  & Capacità dell'insieme \textsl{permesso}.\\ 
+    \constd{CAP\_INHERITABLE}& Capacità dell'insieme \textsl{ereditabile}.\\
     \hline
   \end{tabular}
   \caption{Valori possibili per il tipo di dato \type{cap\_flag\_t} che
@@ -7276,7 +7292,7 @@ questo si può infatti usare la apposita macro \macro{CAP\_DIFFERS}:
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{sys/capability.h}
-\fdecl{int \macro{CAP\_DIFFERS}(value, flag)}
+\fdecl{int \macrod{CAP\_DIFFERS}(value, flag)}
 \fdesc{Controlla lo stato di eventuali differenze delle \textit{capabilities}
   nell'insieme \texttt{flag}.}
 }
@@ -7338,8 +7354,8 @@ tab.~\ref{tab:cap_value_type}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{CAP\_CLEAR}& La capacità non è impostata.\\ 
-    \const{CAP\_SET}  & La capacità è impostata.\\
+    \constd{CAP\_CLEAR}& La capacità non è impostata.\\ 
+    \constd{CAP\_SET}  & La capacità è impostata.\\
     \hline
   \end{tabular}
   \caption{Valori possibili per il tipo di dato \type{cap\_flag\_value\_t} che
@@ -7659,15 +7675,13 @@ directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe
   \kstruct{fs\_struct}; vedi fig.~\ref{fig:proc_task_struct}.} che, pur
 essendo di norma corrispondente alla radice dell'albero dei file dell'intero
 sistema, ha per il processo il significato specifico di directory rispetto
-alla quale vengono risolti i \itindsub{pathname}{assoluto}\textit{pathname}
-assoluti.\footnote{cioè quando un processo chiede la risoluzione di un
-  \textit{pathname}, il kernel usa sempre questa directory come punto di
-  partenza.} Il fatto che questo valore sia specificato per ogni processo apre
-allora la possibilità di modificare le modalità di risoluzione dei
-\itindsub{pathname}{assoluto} \textit{pathname} assoluti da parte di un
-processo cambiando questa directory, così come si fa coi
-\itindsub{pathname}{relativo} \textit{pathname} relativi cambiando la
-directory di lavoro.
+alla quale vengono risolti i \textit{pathname} assoluti.\footnote{cioè quando
+  un processo chiede la risoluzione di un \textit{pathname}, il kernel usa
+  sempre questa directory come punto di partenza.} Il fatto che questo valore
+sia specificato per ogni processo apre allora la possibilità di modificare le
+modalità di risoluzione dei \textit{pathname} assoluti da parte di un processo
+cambiando questa directory, così come si fa coi \textit{pathname} relativi
+cambiando la directory di lavoro.
 
 Normalmente la directory radice di un processo coincide con la radice generica
 dell'albero dei file, che è la directory che viene montata direttamente dal
@@ -7700,12 +7714,11 @@ directory radice con la funzione di sistema \funcd{chroot}, il cui prototipo
 \end{funcproto}
 
 La funzione imposta la directory radice del processo a quella specificata da
-\param{path} (che ovviamente deve esistere) ed ogni
-\itindsub{pathname}{assoluto} \textit{pathname} assoluto usato dalle funzioni
-chiamate nel processo sarà risolto a partire da essa, rendendo impossibile
-accedere alla parte di albero sovrastante. Si ha così quella che viene
-chiamata una \textit{chroot jail}, in quanto il processo non può più accedere
-a file al di fuori della sezione di albero in cui è stato
+\param{path} (che ovviamente deve esistere) ed ogni \textit{pathname} assoluto
+usato dalle funzioni chiamate nel processo sarà risolto a partire da essa,
+rendendo impossibile accedere alla parte di albero sovrastante. Si ha così
+quella che viene chiamata una \textit{chroot jail}, in quanto il processo non
+può più accedere a file al di fuori della sezione di albero in cui è stato
 \textsl{imprigionato}.
 
 Solo un processo con i privilegi di amministratore può usare questa
@@ -7719,10 +7732,9 @@ Questo è il motivo per cui la funzione è efficace nel restringere un processo
 ad un ramo di albero solo se dopo averla eseguita si cedono i privilegi di
 amministratore. Infatti se per un qualunque motivo il processo resta con la
 sua directory di lavoro al di fuori dalla \textit{chroot jail}, potrà accedere
-a tutto il resto del filesystem usando \itindsub{pathname}{relativo} dei
-\textit{pathname} relativi, dato che in tal caso è possibile, grazie all'uso
-di ``\texttt{..}'', risalire all'indietro fino alla radice effettiva
-dell'albero dei file.
+a tutto il resto del filesystem usando dei \textit{pathname} relativi, dato
+che in tal caso è possibile, grazie all'uso di ``\texttt{..}'', risalire
+all'indietro fino alla radice effettiva dell'albero dei file.
 
 Potrebbe sembrare che per risolvere il problema sia sufficiente ricordarsi di
 eseguire preventivamente anche una \func{chdir} sulla directory su cui si
index ba66a35..6abde2f 100644 (file)
@@ -14,9 +14,9 @@
 
 Esamineremo in questo capitolo le due interfacce di programmazione che
 consentono di gestire i dati mantenuti nei file. Cominceremo con quella nativa
-del sistema, detta dei \itindex{file~descriptor} \textit{file descriptor}, che
-viene fornita direttamente dalle \textit{system call} e che non prevede
-funzionalità evolute come la bufferizzazione o funzioni di lettura o scrittura
+del sistema, detta dei \textit{file descriptor}, che viene fornita
+direttamente dalle \textit{system call} e che non prevede funzionalità evolute
+come la bufferizzazione o funzioni di lettura o scrittura
 formattata. Esamineremo poi anche l'interfaccia definita dallo standard ANSI
 C, che viene chiamata dei \textit{file stream} o anche più brevemente degli
 \textit{stream}. Per entrambe dopo una introduzione alle caratteristiche
@@ -468,16 +468,15 @@ Si è riportato in tab.~\ref{tab:open_time_flag} l'elenco dei flag delle
   esistono con Linux.}  Uno di questi, \const{O\_EXCL}, ha senso solo se usato
 in combinazione a \const{O\_CREAT} quando si vuole creare un nuovo file per
 assicurarsi che questo non esista di già, e lo si usa spesso per creare i
-cosiddetti \index{file!di lock} ``\textsl{file di lock}'' (vedi
-sez.~\ref{sec:ipc_file_lock}). Si tenga presente che questa opzione è
-supportata su NFS solo a partire da NFSv3 e con il kernel 2.6, nelle versioni
-precedenti la funzionalità viene emulata controllando prima l'esistenza del
-file per cui usarla per creare \index{file!di lock} un file di lock potrebbe
-dar luogo a una \textit{race condition}.\footnote{un file potrebbe venir
-  creato fra il controllo la successiva apertura con \const{O\_CREAT}, la cosa
-  si può risolvere comunque creando un file con un nome univoco ed usando la
-  funzione \func{link} per creare il \index{file!di lock} file di lock, (vedi
-  sez.~\ref{sec:ipc_file_lock}).}
+cosiddetti ``\textsl{file di lock}'' (vedi sez.~\ref{sec:ipc_file_lock}). Si
+tenga presente che questa opzione è supportata su NFS solo a partire da NFSv3
+e con il kernel 2.6, nelle versioni precedenti la funzionalità viene emulata
+controllando prima l'esistenza del file per cui usarla per creare un file di
+lock potrebbe dar luogo a una \textit{race condition}.\footnote{un file
+  potrebbe venir creato fra il controllo la successiva apertura con
+  \const{O\_CREAT}, la cosa si può risolvere comunque creando un file con un
+  nome univoco ed usando la funzione \func{link} per creare il file di lock,
+  (vedi sez.~\ref{sec:ipc_file_lock}).}
 
 Se si usa \const{O\_EXCL} senza \const{O\_CREAT} il comportamento è
 indefinito.  Nella creazione di un file con \const{O\_CREAT} occorre sempre
@@ -1561,14 +1560,14 @@ filesystem su cui il file ad esso corrispondente si trova.
 \itindbeg{at-functions}
 
 Un problema generale che si pone con l'uso della funzione \func{open}, così
-come per le altre funzioni che prendono come argomenti dei
-\itindsub{pathname}{relativo} \textit{pathname} relativi, è la possibilità,
-quando un \textit{pathname} relativo non fa riferimento ad un file posto
-direttamente nella directory di lavoro corrente, che alcuni dei componenti del
-\textit{pathname} vengano modificati in parallelo alla chiamata a \func{open},
-cosa che lascia aperta la possibilità di una \textit{race condition} in cui
-c'è spazio per un \textit{symlink attack} (si ricordi quanto visto per
-\func{access} in sez.~\ref{sec:file_perm_management}).
+come per le altre funzioni che prendono come argomenti dei \textit{pathname}
+relativi, è la possibilità, quando un \textit{pathname} relativo non fa
+riferimento ad un file posto direttamente nella directory di lavoro corrente,
+che alcuni dei componenti del \textit{pathname} vengano modificati in
+parallelo alla chiamata a \func{open}, cosa che lascia aperta la possibilità
+di una \textit{race condition} in cui c'è spazio per un \textit{symlink
+  attack} (si ricordi quanto visto per \func{access} in
+sez.~\ref{sec:file_perm_management}).
 
 Inoltre come già accennato, la directory di lavoro corrente è una proprietà
 del singolo processo; questo significa che quando si lavora con i
@@ -1581,27 +1580,27 @@ Solaris, a fianco delle normali funzioni che operano sui file (come
 \func{open}, \func{mkdir}, ecc.) sono state introdotte delle ulteriori
 funzioni, dette anche ``\textit{at-functions}'' in quanto contraddistinte dal
 suffisso \texttt{at}, che permettono l'apertura di un file (o le rispettive
-altre operazioni) usando un \itindsub{pathname}{relativo} \textit{pathname}
-relativo ad una directory specificata.\footnote{l'introduzione è avvenuta su
-  proposta dello sviluppatore principale della \acr{glibc} Urlich Drepper e le
-  corrispondenti \textit{system call} sono state inserite nel kernel a partire
-  dalla versione 2.6.16, in precedenza era disponibile una emulazione che, sia
-  pure con prestazioni inferiori, funzionava facendo ricorso all'uso del
-  filesystem \textit{proc} con l'apertura del file attraverso il riferimento a
+altre operazioni) usando un \textit{pathname} relativo ad una directory
+specificata.\footnote{l'introduzione è avvenuta su proposta dello sviluppatore
+  principale della \acr{glibc} Urlich Drepper e le corrispondenti
+  \textit{system call} sono state inserite nel kernel a partire dalla versione
+  2.6.16, in precedenza era disponibile una emulazione che, sia pure con
+  prestazioni inferiori, funzionava facendo ricorso all'uso del filesystem
+  \textit{proc} con l'apertura del file attraverso il riferimento a
   \textit{pathname} del tipo di \texttt{/proc/self/fd/dirfd/relative\_path}.}
 Benché queste funzioni non siano presenti negli standard tradizionali esse
-sono state adottate da altri sistemi unix-like come Solaris, i vari BSD, fino ad
-essere incluse in una recente revisione (la POSIX.1-2008) dello standard
+sono state adottate da altri sistemi unix-like come Solaris, i vari BSD, fino
+ad essere incluse in una recente revisione (la POSIX.1-2008) dello standard
 POSIX.1. Con la \acr{glibc} per l'accesso a queste funzioni è necessario
 definire la macro \macro{\_ATFILE\_SOURCE}.
 
 L'uso di queste funzioni prevede una apertura iniziale della directory che
-sarà la base della risoluzione dei \itindsub{pathname}{relativo}
-\textit{pathname} relativi che verranno usati in seguito, dopo di che si dovrà
-passare il relativo file descriptor alle varie funzioni che useranno quella
-directory come punto di partenza per la risoluzione. In questo modo, anche
-quando si lavora con i \itindex{thread} \textit{thread}, si può mantenere una
-directory di lavoro diversa per ciascuno di essi.
+sarà la base della risoluzione dei \textit{pathname} relativi che verranno
+usati in seguito, dopo di che si dovrà passare il relativo file descriptor
+alle varie funzioni che useranno quella directory come punto di partenza per
+la risoluzione. In questo modo, anche quando si lavora con i \itindex{thread}
+\textit{thread}, si può mantenere una directory di lavoro diversa per ciascuno
+di essi.
 
 Questo metodo, oltre a risolvere i problemi di \textit{race condition},
 consente anche di ottenere aumenti di prestazioni significativi quando si
@@ -1628,17 +1627,16 @@ esame la nuova funzione di sistema \funcd{openat}, avremo il prototipo:
   \func{open}, ed in più:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
-    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file.
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \textit{pathname} relativo,
+    ma \param{dirfd} fa riferimento ad un file.
    \end{errlist}
 }  
 \end{funcproto}
 
 Il comportamento delle nuove funzioni è del tutto analogo a quello delle
 corrispettive classiche, con la sola eccezione del fatto che se fra i loro
-argomenti si utilizza un \itindsub{pathname}{relativo} \textit{pathname}
-relativo questo sarà risolto rispetto alla directory indicata
-da \param{dirfd}. Qualora invece si usi un \itindsub{pathname}{assoluto}
+argomenti si utilizza un \textit{pathname} relativo questo sarà risolto
+rispetto alla directory indicata da \param{dirfd}. Qualora invece si usi un
 \textit{pathname} assoluto \param{dirfd} verrà semplicemente ignorato. Infine
 se per \param{dirfd} si usa il valore speciale \const{AT\_FDCWD}, la
 risoluzione sarà effettuata rispetto alla directory di lavoro corrente del
@@ -1653,8 +1651,8 @@ errori si aggiungono però quelli dovuti a valori errati per \param{dirfd}; in
 particolare si avrà un errore di \errcode{EBADF} se esso non è un file
 descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa
 riferimento ad una directory, tranne il caso in cui si sia specificato un
-\itindsub{pathname}{assoluto} \textit{pathname} assoluto, nel qual caso, come
-detto, il valore di \param{dirfd} sarà completamente ignorato.
+\textit{pathname} assoluto, nel qual caso, come detto, il valore
+di \param{dirfd} sarà completamente ignorato.
 
 \begin{table}[htb]
   \centering
@@ -1736,8 +1734,8 @@ che \func{lchown}; il suo prototipo è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
-    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \textit{pathname} relativo,
+    ma \param{dirfd} fa riferimento ad un file.
   \end{errlist}
 }  
 \end{funcproto}
@@ -1765,8 +1763,8 @@ prima di queste è \funcd{faccessat}, ed il suo prototipo è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
-    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \textit{pathname} relativo,
+    ma \param{dirfd} fa riferimento ad un file.
   \end{errlist}
 }  
 \end{funcproto}
@@ -1798,8 +1796,8 @@ alla funzione di comportarsi sia come analogo di \func{unlink} che di
   \begin{errlist}
   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
-  \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
-    \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file.
+  \item[\errcode{ENOTDIR}] \param{pathname} è un \textit{pathname} relativo,
+    ma \param{dirfd} fa riferimento ad un file.
   \end{errlist}
 }  
 \end{funcproto}
index f18cc3a..2157e74 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -555,16 +555,21 @@ alle directory indicate nel \textit{pathname} (torneremo su questo
 sez.~\ref{sec:file_access_control}) dovranno consentire l'accesso all'intero
 \textit{pathname}.
 
+\itindsubbeg{pathname}{assoluto}
+\itindsubbeg{pathname}{relativo}
+
 Se il \textit{pathname} comincia con il carattere ``\texttt{/}'' la ricerca
 parte dalla directory radice del processo. Questa, a meno di non avere
 eseguito una \func{chroot} (funzione su cui torneremo in
 sez.~\ref{sec:file_chroot}) è la stessa per tutti i processi ed equivale alla
 directory radice dell'albero dei file montata dal kernel all'avvio del
-sistema; in questo caso si parla di un \textsl{pathname assoluto}
-\itindsub{pathname}{assoluto}.  Altrimenti la ricerca parte dalla directory di
-lavoro corrente del processo (su cui torneremo in
-sez.~\ref{sec:file_work_dir}) ed il \textit{pathname} è detto
-\itindsub{pathname}{relativo} \textsl{pathname relativo}.
+sistema; in questo caso si parla di un \textsl{pathname assoluto}. Altrimenti
+la ricerca parte dalla directory di lavoro corrente del processo (su cui
+torneremo in sez.~\ref{sec:file_work_dir}) ed il \textit{pathname} è detto
+\textsl{pathname relativo}.
+
+\itindsubend{pathname}{assoluto}
+\itindsubend{pathname}{relativo}
 
 Infine i nomi di directory ``\file{.}'' e ``\file{..}'' hanno un significato
 speciale e vengono inseriti in ogni directory quando questa viene creata (vedi
@@ -573,12 +578,12 @@ corrente e il secondo alla directory \textsl{genitrice} (o \textit{parent
   directory}) cioè la directory che contiene il riferimento alla directory
 corrente.
 
-In questo modo con ``\file{..}'' si può usare un \itindsub{pathname}{relativo}
-\textit{pathname} relativo per indicare un file posto al di sopra della
-directory corrente, tornando all'indietro nell'albero dei file.  Questa
-retromarcia però su fermerà una volta raggiunta la directory radice, perché
-non esistendo in questo caso una directory superiore, il nome ``\file{..}''
-farà riferimento alla radice stessa.
+In questo modo con ``\file{..}'' si può usare un \textit{pathname} relativo
+per indicare un file posto al di sopra della directory corrente, tornando
+all'indietro nell'albero dei file.  Questa retromarcia però su fermerà una
+volta raggiunta la directory radice, perché non esistendo in questo caso una
+directory superiore, il nome ``\file{..}''  farà riferimento alla radice
+stessa.
 
 \itindend{pathname}
 \itindend{pathname~resolution}
@@ -682,7 +687,7 @@ VMS.\footnote{questo vale anche per i dispositivi a blocchi: la strutturazione
   attraverso un filesystem, il cosiddetto \textit{raw access}, introdotto coi
   kernel della serie 2.4.x ma ormai in sostanziale disuso.}
 
-\index{file!di~dispositivo|}
+\index{file!di~dispositivo|)}
 \index{file!speciali|)} 
 
 Una differenza che attiene ai contenuti di un file però esiste, ed è relativa
@@ -1229,18 +1234,18 @@ Le macro disponibili per controllare l'aderenza ai vari standard messi a
 disposizione della \acr{glibc}, che rendono disponibili soltanto le funzioni
 in essi definite, sono illustrate nel seguente elenco:
 \begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{\_\_STRICT\_ANSI\_\_}] richiede l'aderenza stretta allo standard
+\item[\macrod{\_\_STRICT\_ANSI\_\_}] richiede l'aderenza stretta allo standard
   C ISO; viene automaticamente predefinita qualora si invochi il \texttt{gcc}
   con le opzione \texttt{-ansi} o \texttt{-std=c99}.
 
-\item[\macro{\_POSIX\_SOURCE}] definendo questa macro (considerata obsoleta)
+\item[\macrod{\_POSIX\_SOURCE}] definendo questa macro (considerata obsoleta)
   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 di questa non viene preso in
   considerazione.
 
-\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\macrod{\_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à:
@@ -1266,7 +1271,7 @@ in essi definite, sono illustrate nel seguente elenco:
   \item in futuro valori superiori potranno abilitare ulteriori estensioni.
   \end{itemize}
 
-\item[\macro{\_BSD\_SOURCE}] definendo questa macro si rendono disponibili le
+\item[\macrod{\_BSD\_SOURCE}] definendo questa macro si rendono disponibili 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
@@ -1292,14 +1297,14 @@ in essi definite, sono illustrate nel seguente elenco:
   \macro{\_DEFAULT\_SOURCE} che è definita di default, è stata deprecata a
   partire dalle \acr{glibc} 2.20.
 
-\item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
+\item[\macrod{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
   standard ISO C, POSIX.1, POSIX.2, e X/Open (XPG$n$) illustrati in
   precedenza. Questa macro, essendo ricompresa in \macro{\_DEFAULT\_SOURCE}
   che è definita di default, è stata deprecata a partire dalle \acr{glibc}
   2.20.
 
-\item[\macro{\_DEFAULT\_SOURCE}] questa macro abilita le definizioni
+\item[\macrod{\_DEFAULT\_SOURCE}] questa macro abilita le definizioni
   considerate il \textit{default}, comprese quelle richieste dallo standard
   POSIX.1-2008, ed è sostanzialente equivalente all'insieme di
   \macro{\_SVID\_SOURCE}, \macro{\_BSD\_SOURCE} e
@@ -1310,7 +1315,7 @@ in essi definite, sono illustrate nel seguente elenco:
   dalle \acr{glibc} 2.19 e consente di deprecare \macro{\_SVID\_SOURCE} e
   \macro{\_BSD\_SOURCE}.
 
-\item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili
   le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche
   queste sono un sovrainsieme di quelle definite negli standard POSIX.1 e
   POSIX.2 ed in effetti sia \macro{\_POSIX\_SOURCE} che
@@ -1332,14 +1337,14 @@ in essi definite, sono illustrate nel seguente elenco:
     estensioni XSI.
   \end{itemize}
 
-\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si rendono
+\item[\macrod{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si rendono
   disponibili le ulteriori funzionalità necessarie ad essere conformi al
   rilascio del marchio \textit{X/Open Unix} corrispondenti allo standard
   Unix95, vale a dire quelle specificate da SUSv1/XPG4v2. Questa macro viene
   definita implicitamente tutte le volte che si imposta
   \macro{\_XOPEN\_SOURCE} ad un valore maggiore o uguale a 500.
 
-\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ISOC99\_SOURCE}] definendo questa macro si rendono disponibili
   le funzionalità previste per la revisione delle librerie standard del C
   introdotte con lo standard ISO C99. La macro è definita a partire dalla
   versione 2.1.3 della \acr{glibc}. 
@@ -1351,13 +1356,13 @@ in essi definite, sono illustrate nel seguente elenco:
   viene tuttora riconosciuta come equivalente di \macro{\_ISOC99\_SOURCE} per
   compatibilità.
 
-\item[\macro{\_ISOC11\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ISOC11\_SOURCE}] definendo questa macro si rendono disponibili
   le funzionalità previste per la revisione delle librerie standard del C
   introdotte con lo standard ISO C11, e abilita anche quelle previste dagli
   standard C99 e C95. La macro è definita a partire dalla versione 2.16 della
   \acr{glibc}.
 
-\item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili
   tutte le funzionalità disponibili nei vari standard oltre a varie estensioni
   specifiche presenti solo nella \acr{glibc} ed in Linux. Gli standard coperti
   sono: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, SUS.
@@ -1391,14 +1396,14 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
 
 \begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
+\item[\macrod{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono
   disponibili alcune funzioni che consentono di superare una inconsistenza
   presente negli standard con i file di grandi dimensioni, ed in particolare
   definire le due funzioni \func{fseeko} e \func{ftello} che al contrario
   delle corrispettive \func{fseek} e \func{ftell} usano il tipo di dato
   specifico \ctyp{off\_t} (vedi sez.~\ref{sec:file_io}).
 
-\item[\macro{\_LARGEFILE64\_SOURCE}] definendo questa macro si rendono
+\item[\macrod{\_LARGEFILE64\_SOURCE}] definendo questa macro si rendono
   disponibili le funzioni di una interfaccia alternativa al supporto di valori
   a 64 bit nelle funzioni di gestione dei file (non supportati in certi
   sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di
@@ -1414,7 +1419,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   di \texttt{64} consente di usare in maniera trasparente le funzioni
   dell'interfaccia classica.
 
-\item[\macro{\_FILE\_OFFSET\_BITS}] la definizione di questa macro al valore
+\item[\macrod{\_FILE\_OFFSET\_BITS}] la definizione di questa macro al valore
   di \texttt{64} consente di attivare la conversione automatica di tutti i
   riferimenti a dati e funzioni a 32 bit nelle funzioni di interfaccia ai file
   con le equivalenti a 64 bit, senza dover utilizzare esplicitamente
@@ -1430,13 +1435,13 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   dimensioni. Su sistemi a 64 bit invece, dove il problema non sussiste, la
   macro non ha nessun effetto.
 
-\item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\macrod{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
   le estensioni delle funzioni di creazione, accesso e modifica di file e
   directory che risolvono i problemi di sicurezza insiti nell'uso di
   \textit{pathname} relativi con programmi \textit{multi-thread} illustrate in
   sez.~\ref{sec:file_openat}.
 
-\item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
+\item[\macrod{\_REENTRANT}] definendo questa macro, o la equivalente
   \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
   versioni rientranti (vedi sez.~\ref{sec:proc_reentrant}) di alcune funzioni,
   necessarie quando si usano i \textit{thread}.  Alcune di queste funzioni
@@ -1444,7 +1449,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   disponibili soltanto su alcuni sistemi, o specifiche della \acr{glibc}, e
   possono essere utilizzate una volta definita la macro.
 
-\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata
+\item[\macrod{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata
   l'inserimento di alcuni controlli per alcune funzioni di allocazione e
   manipolazione di memoria e stringhe che consentono di rilevare
   automaticamente alcuni errori di \textit{buffer overflow} nell'uso delle
diff --git a/ipc.tex b/ipc.tex
index 7f7dc44..6f5f8cb 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -539,9 +539,8 @@ una \textit{fifo} in scrittura anche se non ci sono ancora processi il
 lettura. Infine è possibile anche usare la \textit{fifo} all'interno di un
 solo processo, nel qual caso però occorre stare molto attenti alla possibili
 situazioni di stallo: se si cerca di leggere da una \textit{fifo} che non
-contiene dati si avrà infatti un \itindex{deadlock} \textit{deadlock}
-immediato, dato che il processo si blocca e quindi non potrà mai eseguire le
-funzioni di scrittura.
+contiene dati si avrà infatti un \textit{deadlock} immediato, dato che il
+processo si blocca e quindi non potrà mai eseguire le funzioni di scrittura.
 
 Per la loro caratteristica di essere accessibili attraverso il filesystem, è
 piuttosto frequente l'utilizzo di una \textit{fifo} come canale di
@@ -2084,7 +2083,7 @@ specificata con \param{cmd}, ed opera o sull'intero insieme specificato da
     \includestruct{listati/semun.h}
   \end{minipage} 
   \normalsize 
-  \caption{La definizione dei possibili valori di una \direct{union}
+  \caption{La definizione dei possibili valori di una \dirct{union}
     \structd{semun}, usata come quarto argomento della funzione
     \func{semctl}.}
   \label{fig:ipc_semun}
@@ -4627,8 +4626,8 @@ dall'argomento \param{sem}, se questo era nullo la relativa risorsa risulterà
 sbloccata, cosicché un altro processo (o \itindex{thread} \textit{thread})
 eventualmente bloccato in una \func{sem\_wait} sul semaforo possa essere
 svegliato e rimesso in esecuzione.  Si tenga presente che la funzione è sicura
-\index{funzioni!sicure} per l'uso all'interno di un gestore di segnali (si
-ricordi quanto detto in sez.~\ref{sec:sig_signal_handler}).
+per l'uso all'interno di un gestore di segnali (si ricordi quanto detto in
+sez.~\ref{sec:sig_signal_handler}).
 
 Se invece di operare su un semaforo se ne volesse semplicemente leggere il
 valore, si potrà usare la funzione \funcd{sem\_getvalue}, il cui prototipo è:
index 4b74b8c..1561d44 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 }
 
 \newcommand{\funcd}[1]{%
-\index{funzione!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
+\index{funzione!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{funzione!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (funzione)}!definizione di}\texttt{#1}%
 }
 \newcommand{\funcm}[1]{%
-\index{funzione!{#1}@{{\tt {#1}}}!menzione di}\texttt{#1}%
+\index{funzione!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{funzione!{#1}@{{\tt {#1}}}!menzione di}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (funzione)}!definizione di}\texttt{#1}%
 }
 
 \newcommand{\macro}[1]{%
+\texttt{#1}%
+%\index{macro!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (macro)}}\texttt{#1}%
+}
+
+\newcommand{\macrod}[1]{%
 \index{macro!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (macro)}}\texttt{#1}%
 }
 
+\newcommand{\macrobeg}[1]{%
+\index{macro!{#1}@{{\tt {#1}}}|(}%
+%\index{#1@{{\tt {#1}} (macro)}}\texttt{#1}%
+}
+\newcommand{\macroend}[1]{%
+\index{macro!{#1}@{{\tt {#1}}}|)}%
+%\index{#1@{{\tt {#1}} (macro)}}\texttt{#1}%
+}
+
 \newcommand{\errcode}[1]{%
 \texttt{#1}%
 %\index{errore!{#1}@{{\tt {#1}}}}\texttt{#1}%
 \newcommand{\val}[1]{\texttt{#1}}     % value 
 
 \newcommand{\signal}[1]{%
+\texttt{#1}%
+%\index{segnale!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
+}                                     % constant name
+
+\newcommand{\signald}[1]{%
 \index{segnale!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
 }                                     % constant name
 
-\newcommand{\const}[1]{%
+\newcommand{\constd}[1]{%
 \index{costante!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
 }                                     % constant name
 
+\newcommand{\constbeg}[1]{%
+\index{costante!{#1}@{{\tt {#1}}}|(}%
+%\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
+}                                     % constant name
+\newcommand{\constend}[1]{%
+\index{costante!{#1}@{{\tt {#1}}}|)}%
+%\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
+}                                     % constant name
+
+\newcommand{\const}[1]{%
+\texttt{#1}%
+%\index{costante!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (costante)}}\texttt{#1}%
+}                                     % constant name
+
 \newcommand{\instruction}[1]{%
 \index{istruzione linguaggio C!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
-}                                     % constant name
+}                                      % instruction name
+
+\newcommand{\instr}[1]{\texttt{#1}}    % instruction
 
 \newcommand{\direct}[1]{%
 \index{direttiva linguaggio C!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
-}                                     % constant name
+}                                     % directive name
+
+\newcommand{\dirct}[1]{\texttt{#1}}   % directive
+
 
 \newcommand{\file}[1]{\texttt{#1}}    % file name
 \newcommand{\link}[1]{\texttt{#1}}    % html link
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
 }                                     % system file name
 \newcommand{\conffile}[1]{%
+\texttt{#1}%
+%\index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % configuration file name
+\newcommand{\conffiled}[1]{%
 \index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
 }                                     % configuration file name
+\newcommand{\conffilebeg}[1]{%
+\index{file!di~configurazione!{#1}@{{\tt {#1}}}}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % configuration file name
+\newcommand{\conffileend}[1]{%
+\index{file!di~configurazione!{#1}@{{\tt {#1}}}}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % configuration file name
 \newcommand{\procrelfile}[2]{%
 \index{file!filesystem~\texttt{/proc}!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
 
 
 \newcommand{\kstruct}[1]{%
-\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}%
+\texttt{#1}%
+%\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (struttura dati)}}\texttt{#1}%
 }                                     % struttura dati
 \newcommand{\kstructd}[1]{%
-\index{struttura dati del kernel!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
+\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}%
+%\index{struttura dati del kernel!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (struttura dati)}!definizione di}\texttt{#1}%
 }                                     % struttura dati
 \newcommand{\type}[1]{%
 \newcommand{\itindsub}[2]{%
 \index{#1@{\textit{#1}}!\textit{#2}}%
 }
+\newcommand{\itindsubbeg}[2]{%
+\index{#1@{\textit{#1}}!\textit{#2}}%
+}
+\newcommand{\itindsubend}[2]{%
+\index{#1@{\textit{#1}}!\textit{#2}}%
+}
 
 % Aggiunte di Mirko per la gestione delle tabelle complicate come immagini
 % nella traslazione in HTML
index be725cd..b25c658 100644 (file)
@@ -248,8 +248,7 @@ di quelli installati con il sistema,\footnote{in un sistema GNU/Linux che
   segue le specifiche del \textit{Filesystem Hierarchy Standard} (per maggiori
   informazioni si consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto
   \texttt{/usr/include}.}  o fra virgolette, nel qual caso si fa riferimento
-ad una versione locale, da indicare con un \itindsub{pathname}{relativo}
-\textit{pathname} relativo:
+ad una versione locale, da indicare con un \textit{pathname} relativo:
 \includecodesnip{listati/main_include.c}
 
 Si tenga presente che oltre ai nomi riservati a livello generale di cui si è
@@ -427,10 +426,10 @@ usare un multiplo di 256, di avere uno stato di uscita uguale a zero, che
 verrebbe interpretato come un successo.
 
 Per questo motivo in \headfile{stdlib.h} sono definite, seguendo lo standard
-POSIX, le due costanti \const{EXIT\_SUCCESS} e \const{EXIT\_FAILURE}, da usare
-sempre per specificare lo stato di uscita di un processo. Su Linux, ed in
-generale in qualunque sistema POSIX, ad esse sono assegnati rispettivamente i
-valori 0 e 1.
+POSIX, le due costanti \constd{EXIT\_SUCCESS} e \constd{EXIT\_FAILURE}, da
+usare sempre per specificare lo stato di uscita di un processo. Su Linux, ed
+in generale in qualunque sistema POSIX, ad esse sono assegnati rispettivamente
+valori 0 e 1.
 
 \itindend{exit~status}
 
@@ -482,7 +481,7 @@ chiamata ad una funzione che effettui tali operazioni all'uscita dal
 programma. A questo scopo lo standard ANSI C prevede la possibilità di
 registrare un certo numero di funzioni che verranno eseguite all'uscita dal
 programma,\footnote{nel caso di \func{atexit} lo standard POSIX.1-2001
-  richiede che siano registrabili almeno \const{ATEXIT\_MAX} funzioni (il
+  richiede che siano registrabili almeno \constd{ATEXIT\_MAX} funzioni (il
   valore può essere ottenuto con \func{sysconf}, vedi
   sez.~\ref{sec:sys_limits}).} sia per la chiamata ad \func{exit} che per il
 ritorno di \code{main}. La prima funzione che si può utilizzare a tal fine è
@@ -663,7 +662,7 @@ bit e di 8kb sulle alpha. Con le versioni più recenti del kernel è possibile
 anche utilizzare pagine di dimensioni maggiori (di 4Mb, dette \textit{huge
   page}), per sistemi con grandi quantitativi di memoria in cui l'uso di
 pagine troppo piccole comporta una perdita di prestazioni. In alcuni sistemi
-la costante \const{PAGE\_SIZE}, definita in \headfile{limits.h}, indica la
+la costante \constd{PAGE\_SIZE}, definita in \headfile{limits.h}, indica la
 dimensione di una pagina in byte, con Linux questo non avviene e per ottenere
 questa dimensione si deve ricorrere alla funzione \func{getpagesize} (vedi
 sez.~\ref{sec:sys_memory_res}).
@@ -754,10 +753,10 @@ processo. Essa viene divisa in \textsl{segmenti}, cioè un insieme contiguo di
 indirizzi virtuali ai quali il processo può accedere.  Solitamente un
 programma C viene suddiviso nei seguenti segmenti:
 \index{segmento!testo|(}
-\index{segmento!dati(}
+\index{segmento!dati|(}
 \itindbeg{heap} 
 \itindbeg{stack}
-\begin{enumerate*}
+\begin{enumerate}
 \item Il \textsl{segmento di testo} o \textit{text segment}.  Contiene il
   codice del programma, delle funzioni di librerie da esso utilizzate, e le
   costanti.  Normalmente viene condiviso fra tutti i processi che eseguono lo
@@ -783,7 +782,7 @@ programma C viene suddiviso nei seguenti segmenti:
     globale è che essa può essere vista solo all'interno della funzione in cui
     è dichiarata.} e la memoria allocata dinamicamente. Di norma è diviso in
   tre parti:
-  \begin{itemize*}
+  \begin{itemize}
   \item Il segmento dei dati inizializzati, che contiene le variabili il cui
     valore è stato assegnato esplicitamente. Ad esempio se si definisce:
     \includecodesnip{listati/pi.c}
@@ -810,7 +809,7 @@ programma C viene suddiviso nei seguenti segmenti:
     disallocare la memoria dinamica con le apposite funzioni (vedi
     sez.~\ref{sec:proc_mem_alloc}), ma il suo limite inferiore, quello
     adiacente al segmento dei dati non inizializzati, ha una posizione fissa.
-  \end{itemize*}
+  \end{itemize}
 \item Il segmento di \textit{stack}, che contiene quello che viene chiamato lo
   ``\textit{stack}'' del programma.  Tutte le volte che si effettua una
   chiamata ad una funzione è qui che viene salvato l'indirizzo di ritorno e le
@@ -834,7 +833,7 @@ programma C viene suddiviso nei seguenti segmenti:
   La dimensione di questo segmento aumenta seguendo la crescita dello
   \textit{stack} del programma, ma non viene ridotta quando quest'ultimo si
   restringe.
-\end{enumerate*}
+\end{enumerate}
 
 \begin{figure}[htb]
   \centering
@@ -878,7 +877,7 @@ mai salvato sul file che contiene l'eseguibile, dato che viene sempre
 inizializzato a zero al caricamento del programma.
 
 \index{segmento!testo|)}
-\index{segmento!dati)}
+\index{segmento!dati|)}
 \itindend{heap} 
 \itindend{stack}
 
@@ -1074,25 +1073,23 @@ Il problema è che l'esaurimento della memoria può avvenire in qualunque
 momento, in corrispondenza ad una qualunque chiamata di \func{malloc} che può
 essere in una sezione del codice che non ha alcuna relazione con la funzione
 che contiene l'errore. Per questo motivo è sempre molto difficile trovare un
-\textit{memory leak}.
-
-In C e C++ il problema è particolarmente sentito. In C++, per mezzo della
-programmazione ad oggetti, il problema dei \textit{memory leak} si può
-notevolmente ridimensionare attraverso l'uso accurato di appositi oggetti come
-gli \textit{smartpointers}.  Questo però in genere va a scapito delle
-prestazioni dell'applicazione in esecuzione.
-
-% TODO decidere cosa fare di questo che segue
-% In altri linguaggi come il java e recentemente il C\# il problema non si pone
-% nemmeno perché la gestione della memoria viene fatta totalmente in maniera
-% automatica, ovvero il programmatore non deve minimamente preoccuparsi di
-% liberare la memoria allocata precedentemente quando non serve più, poiché
-% l'infrastruttura del linguaggio gestisce automaticamente la cosiddetta
-% \index{\textit{garbage~collection}} \textit{garbage collection}. In tal caso,
-% attraverso meccanismi simili a quelli del \textit{reference counting}, quando
-% una zona di memoria precedentemente allocata non è più riferita da nessuna
-% parte del codice in esecuzione, può essere deallocata automaticamente in
-% qualunque momento dall'infrastruttura.
+\textit{memory leak}.  In C e C++ il problema è particolarmente sentito. In
+C++, per mezzo della programmazione ad oggetti, il problema dei \textit{memory
+  leak} si può notevolmente ridimensionare attraverso l'uso accurato di
+appositi oggetti come gli \textit{smartpointers}.  Questo però in genere va a
+scapito delle prestazioni dell'applicazione in esecuzione.
+
+% TODO decidere cosa fare di questo che segue In altri linguaggi come il java
+% e recentemente il C\# il problema non si pone nemmeno perché la gestione
+% della memoria viene fatta totalmente in maniera automatica, ovvero il
+% programmatore non deve minimamente preoccuparsi di liberare la memoria
+% allocata precedentemente quando non serve più, poiché l'infrastruttura del
+% linguaggio gestisce automaticamente la cosiddetta
+% \itindex{garbage~collection} \textit{garbage collection}. In tal caso,
+% attraverso meccanismi simili a quelli del \textit{reference counting},
+% quando una zona di memoria precedentemente allocata non è più riferita da
+% nessuna parte del codice in esecuzione, può essere deallocata
+% automaticamente in qualunque momento dall'infrastruttura.
 
 % Anche questo va a scapito delle prestazioni dell'applicazione in esecuzione
 % (inoltre le applicazioni sviluppate con tali linguaggi di solito non sono
@@ -1155,7 +1152,7 @@ Gli svantaggi sono che questa funzione non è disponibile su tutti gli Unix, e
 non è inserita né nello standard POSIX né in SUSv3 (ma è presente in BSD), il
 suo utilizzo quindi limita la portabilità dei programmi. Inoltre la funzione
 non può essere usata nella lista degli argomenti di una funzione, perché lo
-spazio verrebbe allocato nel mezzo degli stessi.  Inoltre non è chiaramente
+spazio verrebbe allocato nel mezzo degli stessi. Inoltre non è chiaramente
 possibile usare \func{alloca} per allocare memoria che deve poi essere usata
 anche al di fuori della funzione in cui essa viene chiamata, dato che
 all'uscita dalla funzione lo spazio allocato diventerebbe libero, e potrebbe
@@ -1174,7 +1171,6 @@ comportamento del programma può risultare indefinito, dando luogo ad una
 \textit{segment violation} la prima volta che cercherà di accedere alla
 memoria non effettivamente disponibile.
 
-
 \index{segmento!dati|(}
 \itindbeg{heap} 
 
@@ -1200,9 +1196,9 @@ uguale di 500). La prima funzione è \funcd{brk}, ed il suo prototipo è:
 La funzione è un'interfaccia all'omonima \textit{system call} ed imposta
 l'indirizzo finale del segmento dati di un processo (più precisamente dello
 \textit{heap}) all'indirizzo specificato da \param{addr}. Quest'ultimo deve
-essere un valore ragionevole, e la dimensione totale non deve comunque
-eccedere un eventuale limite (vedi sez.~\ref{sec:sys_resource_limit}) imposto
-sulle dimensioni massime del segmento dati del processo.
+essere un valore ragionevole e la dimensione totale non deve comunque eccedere
+un eventuale limite (vedi sez.~\ref{sec:sys_resource_limit}) sulle dimensioni
+massime del segmento dati del processo.
 
 Il valore di ritorno della funzione fa riferimento alla versione fornita dalla
 \acr{glibc}, in realtà in Linux la \textit{system call} corrispondente
@@ -1370,7 +1366,7 @@ sez.~\ref{sec:proc_exec}).
 Il sistema pone dei limiti all'ammontare di memoria di un processo che può
 essere bloccata e al totale di memoria fisica che si può dedicare a questo, lo
 standard POSIX.1 richiede che sia definita in \headfile{unistd.h} la macro
-\macro{\_POSIX\_MEMLOCK\_RANGE} per indicare la capacità di eseguire il
+\macrod{\_POSIX\_MEMLOCK\_RANGE} per indicare la capacità di eseguire il
 \textit{memory locking}.
 
 Siccome la richiesta di un \textit{memory lock} da parte di un processo riduce
@@ -1454,10 +1450,10 @@ espressi dalle costanti riportate in tab.~\ref{tab:mlockall_flags}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{MCL\_CURRENT}& blocca tutte le pagine correntemente mappate nello
-                          spazio di indirizzi del processo.\\
-    \const{MCL\_FUTURE} & blocca tutte le pagine che verranno mappate nello
-                          spazio di indirizzi del processo.\\
+    \constd{MCL\_CURRENT}& blocca tutte le pagine correntemente mappate nello
+                           spazio di indirizzi del processo.\\
+    \constd{MCL\_FUTURE} & blocca tutte le pagine che verranno mappate nello
+                           spazio di indirizzi del processo.\\
    \hline
   \end{tabular}
   \caption{Valori e significato dell'argomento \param{flags} della funzione
@@ -1636,20 +1632,20 @@ tipologia di errore riscontrata.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{MCHECK\_OK}      & Riportato a \func{mprobe} se nessuna
-                              inconsistenza è presente.\\
-    \const{MCHECK\_DISABLED}& Riportato a \func{mprobe} se si è chiamata
-                              \func{mcheck} dopo aver già usato
-                              \func{malloc}.\\
-    \const{MCHECK\_HEAD}    & I dati immediatamente precedenti il buffer sono
-                              stati modificati, avviene in genere quando si
-                              decrementa eccessivamente il valore di un
-                              puntatore scrivendo poi prima dell'inizio del
-                              buffer.\\
-    \const{MCHECK\_TAIL}    & I dati immediatamente seguenti il buffer sono
-                              stati modificati, succede quando si va scrivere
-                              oltre la dimensione corretta del buffer.\\
-    \const{MCHECK\_FREE}    & Il buffer è già stato disallocato.\\
+    \constd{MCHECK\_OK}      & Riportato a \func{mprobe} se nessuna
+                               inconsistenza è presente.\\
+    \constd{MCHECK\_DISABLED}& Riportato a \func{mprobe} se si è chiamata
+                               \func{mcheck} dopo aver già usato
+                               \func{malloc}.\\
+    \constd{MCHECK\_HEAD}    & I dati immediatamente precedenti il buffer sono
+                               stati modificati, avviene in genere quando si
+                               decrementa eccessivamente il valore di un
+                               puntatore scrivendo poi prima dell'inizio del
+                               buffer.\\
+    \constd{MCHECK\_TAIL}    & I dati immediatamente seguenti il buffer sono
+                               stati modificati, succede quando si va scrivere
+                               oltre la dimensione corretta del buffer.\\
+    \constd{MCHECK\_FREE}    & Il buffer è già stato disallocato.\\
     \hline
   \end{tabular}
   \caption{Valori dello stato dell'allocazione di memoria ottenibili dalla
@@ -1860,7 +1856,7 @@ Normalmente \func{getopt} compie una permutazione degli elementi di
 opzioni sono spostati in coda al vettore. Oltre a questa esistono altre due
 modalità di gestire gli elementi di \param{argv}; se \param{optstring} inizia
 con il carattere ``\texttt{+}'' (o è impostata la variabile di ambiente
-\macro{POSIXLY\_CORRECT}) la scansione viene fermata non appena si incontra un
+\cmd{POSIXLY\_CORRECT}) la scansione viene fermata non appena si incontra un
 elemento che non è un'opzione.
 
 L'ultima modalità, usata quando un programma può gestire la mescolanza fra
@@ -2319,7 +2315,7 @@ relativo puntatore fra le funzioni.
 \subsection{Il passaggio di un numero variabile di argomenti}
 \label{sec:proc_variadic}
 
-\index{funzioni!variadic|(}
+\index{funzioni!\textit{variadic}|(}
 
 Come vedremo nei capitoli successivi, non sempre è possibile specificare un
 numero fisso di argomenti per una funzione.  Lo standard ISO C prevede nella
@@ -2377,6 +2373,8 @@ quelli variabili vengono indicati in maniera generica dalla
 pertanto quella sequenziale, in cui vengono estratti dallo \textit{stack}
 secondo l'ordine in cui sono stati scritti nel prototipo della funzione.
 
+\macrobeg{va\_start}
+
 Per fare questo in \headfile{stdarg.h} sono definite delle macro specifiche,
 previste dallo standard ISO C89, che consentono di eseguire questa operazione.
 La prima di queste macro è \macro{va\_start}, che inizializza opportunamente
@@ -2396,6 +2394,8 @@ deve essere una apposita variabile di tipo \type{va\_list}; il
 parametro \param{last} deve indicare il nome dell'ultimo degli argomenti fissi
 dichiarati nel prototipo della funzione \textit{variadic}. 
 
+\macrobeg{va\_arg}
+
 La seconda macro di gestione delle liste di argomenti di una funzione
 \textit{variadic} è \macro{va\_arg}, che restituisce in successione un
 argomento della lista; la sua definizione è:
@@ -2423,8 +2423,10 @@ effettivamente forniti si otterranno dei valori indefiniti. Si avranno
 risultati indefiniti anche quando si chiama \macro{va\_arg} specificando un
 tipo che non corrisponde a quello usato per il corrispondente argomento.
 
+\macrobeg{va\_end}
+
 Infine una volta completata l'estrazione occorre indicare che si sono concluse
-le operazioni con la macro \macro{va\_end}, la cui definizione è:
+le operazioni con la macro \macrod{va\_end}, la cui definizione è:
 
 {\centering
 \begin{funcbox}{ 
@@ -2467,6 +2469,10 @@ caso però al ritorno della funzione \macro{va\_arg} non può più essere usata
 (anche se non si era completata l'estrazione) dato che il valore di \param{ap}
 risulterebbe indefinito.
 
+\macroend{va\_start}
+\macroend{va\_arg}
+\macroend{va\_end}
+
 Esistono dei casi in cui è necessario eseguire più volte la scansione degli
 argomenti e poter memorizzare una posizione durante la stessa. In questo caso
 sembrerebbe naturale copiarsi la lista degli argomenti \param{ap} con una
@@ -2489,7 +2495,7 @@ utilizzare solo attraverso dalle opportune funzioni di gestione.
 Per questo motivo una variabile di tipo \type{va\_list} non può essere
 assegnata direttamente ad un'altra variabile dello stesso tipo, ma lo standard
 ISO C99\footnote{alcuni sistemi che non hanno questa macro provvedono al suo
-  posto \macro{\_\_va\_copy} che era il nome proposto in una bozza dello
+  posto \macrod{\_\_va\_copy} che era il nome proposto in una bozza dello
   standard.}  ha previsto una macro ulteriore che permette di eseguire la
 copia di una lista degli argomenti:
 
@@ -2503,7 +2509,7 @@ copia di una lista degli argomenti:
 
 La macro copia l'attuale della lista degli argomenti \param{src} su una nuova
 lista \param{dest}. Anche in questo caso è buona norma chiudere ogni
-esecuzione di una \macro{va\_copy} con una corrispondente \macro{va\_end} sul
+esecuzione di una \macrod{va\_copy} con una corrispondente \macro{va\_end} sul
 nuovo puntatore alla lista degli argomenti.
 
 La chiamata di una funzione con un numero variabile di argomenti, posto che la
@@ -2535,7 +2541,7 @@ valore speciale per l'ultimo argomento, come fa ad esempio \func{execl} che
 usa un puntatore \val{NULL} per indicare la fine della lista degli argomenti
 (vedi sez.~\ref{sec:proc_exec}).
 
-\index{funzioni!variadic|)}
+\index{funzioni!\textit{variadic}|)}
 
 \subsection{Il controllo di flusso non locale}
 \label{sec:proc_longjmp}
@@ -2625,10 +2631,10 @@ dell'argomento \param{val} deve essere sempre diverso da zero, se si è
 specificato 0 sarà comunque restituito 1 al suo posto.
 
 In sostanza l'esecuzione di \func{longjmp} è analoga a quella di una
-istruzione \instruction{return}, solo che invece di ritornare alla riga
+istruzione \instr{return}, solo che invece di ritornare alla riga
 successiva della funzione chiamante, il programma in questo caso ritorna alla
 posizione della relativa \func{setjmp}. L'altra differenza fondamentale con
-\instruction{return} è che il ritorno può essere effettuato anche attraverso
+\instr{return} è che il ritorno può essere effettuato anche attraverso
 diversi livelli di funzioni annidate.
 
 L'implementazione di queste funzioni comporta alcune restrizioni dato che esse
@@ -2652,13 +2658,13 @@ dei seguenti casi:
 In generale, dato che l'unica differenza fra la chiamata diretta e quella
 ottenuta nell'uscita con un \func{longjmp} è costituita dal valore di ritorno
 di \func{setjmp}, pertanto quest'ultima viene usualmente chiamata all'interno
-di un una istruzione \instruction{if} che permetta di distinguere i due casi.
+di un una istruzione \instr{if} che permetta di distinguere i due casi.
 
 Uno dei punti critici dei salti non-locali è quello del valore delle
 variabili, ed in particolare quello delle variabili automatiche della funzione
 a cui si ritorna. In generale le variabili globali e statiche mantengono i
 valori che avevano al momento della chiamata di \func{longjmp}, ma quelli
-delle variabili automatiche (o di quelle dichiarate \direct{register}) sono in
+delle variabili automatiche (o di quelle dichiarate \dirct{register}) sono in
 genere indeterminati.
 
 Quello che succede infatti è che i valori delle variabili che sono tenute in
index eb37253..b6bb0bb 100644 (file)
@@ -206,7 +206,7 @@ tradizionalmente il \ids{PID} un numero positivo memorizzato in un intero a 16
 bit, arriva ad un massimo di 32768.  Oltre questo valore l'assegnazione
 riparte dal numero più basso disponibile a partire da un minimo di
 300,\footnote{questi valori, fino al kernel 2.4.x, erano definiti dalla macro
-  \const{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del
+  \constd{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del
   kernel, con il 2.6.x e la nuova interfaccia per i \textit{thread} anche il
   meccanismo di allocazione dei \ids{PID} è stato modificato ed il valore
   massimo è impostabile attraverso il file \sysctlfile{kernel/pid\_max} e di
@@ -999,12 +999,12 @@ sono riportate anche le costanti definite per indicare alcuni di essi.
     $<-1$& --               & Attende per un figlio il cui \textit{process
                               group} (vedi sez.~\ref{sec:sess_proc_group}) è
                               uguale al valore assoluto di \param{pid}.\\ 
-    $-1$&\const{WAIT\_ANY}  & Attende per un figlio qualsiasi, usata in
-                              questa maniera senza specificare nessuna opzione
-                              è equivalente a \func{wait}.\\ 
-    $ 0$&\const{WAIT\_MYPGRP}&Attende per un figlio il cui \textit{process
+    $-1$&\constd{WAIT\_ANY}  & Attende per un figlio qualsiasi, usata in
+                               questa maniera senza specificare nessuna opzione
+                               è equivalente a \func{wait}.\\ 
+    $ 0$&\constd{WAIT\_MYPGRP}&Attende per un figlio il cui \textit{process
                                group} (vedi sez.~\ref{sec:sess_proc_group}) è
-                              uguale a quello del processo chiamante.\\ 
+                                uguale a quello del processo chiamante.\\ 
     $>0$& --                & Attende per un figlio il cui \ids{PID} è uguale
                               al valore di \param{pid}.\\
     \hline
@@ -1042,17 +1042,17 @@ sez.~\ref{sec:thread_xxx}).
                         fermato ha ripreso l'esecuzione (disponibile solo a
                         partire dal kernel 2.6.10).\\
     \hline
-    \const{\_\_WCLONE}& Attende solo per i figli creati con \func{clone} 
+    \constd{\_\_WCLONE}& Attende solo per i figli creati con \func{clone} 
                         (vedi sez.~\ref{sec:process_clone}), vale a dire
                         processi che non emettono nessun segnale 
                         o emettono un segnale diverso da \signal{SIGCHLD} alla
                         terminazione, il default è attendere soltanto i
                         processi figli ordinari ignorando quelli creati da
                         \func{clone}.\\
-    \const{\_\_WALL}  & Attende per qualunque figlio, sia ordinario che creato
+    \constd{\_\_WALL}  & Attende per qualunque figlio, sia ordinario che creato
                         con  \func{clone}, se specificata insieme a
                         \const{\_\_WCLONE} quest'ultima viene ignorata. \\
-    \const{\_\_WNOTHREAD}& Non attende per i figli di altri \textit{thread}
+    \constd{\_\_WNOTHREAD}& Non attende per i figli di altri \textit{thread}
                         dello stesso \textit{thread group}, questo era il
                         comportamento di default del kernel 2.4 che non
                         supportava la possibilità, divenuta il default a
@@ -1065,6 +1065,7 @@ sez.~\ref{sec:thread_xxx}).
   \label{tab:proc_waitpid_options}
 \end{table}
 
+\constbeg{WNOHANG}
 
 L'uso dell'opzione \const{WNOHANG} consente di prevenire il blocco della
 funzione qualora nessun figlio sia uscito o non si siano verificate le altre
@@ -1072,6 +1073,10 @@ condizioni per l'uscita della funzione. in tal caso. In tal caso la funzione,
 invece di restituire il \ids{PID} del processo (che è sempre un intero
 positivo) ritornerà un valore nullo.
 
+\constend{WNOHANG}
+\constbeg{WUNTRACED}
+\constbeg{WCONTINUED}
+
 Le altre due opzioni, \const{WUNTRACED} e \const{WCONTINUED}, consentono
 rispettivamente di tracciare non la terminazione di un processo, ma il fatto
 che esso sia stato fermato, o fatto ripartire, e sono utilizzate per la
@@ -1088,6 +1093,9 @@ mentre con \const{WCONTINUED} la funzione ritorna quando un processo in stato
 \signal{SIGCONT} (l'uso di questi segnali per il controllo di sessione è
 trattato in sez.~\ref{sec:sess_ctrl_term}).
 
+\constend{WUNTRACED}
+\constend{WCONTINUED}
+
 La terminazione di un processo figlio (così come gli altri eventi osservabili
 con \func{waitpid}) è chiaramente un evento asincrono rispetto all'esecuzione
 di un programma e può avvenire in un qualunque momento. Per questo motivo,
@@ -1148,40 +1156,40 @@ ecc.\footnote{le definizioni esatte si possono trovare in
     \textbf{Macro} & \textbf{Descrizione}\\
     \hline
     \hline
-    \macro{WIFEXITED}\texttt{(s)}   & Condizione vera (valore non nullo) per
+    \macrod{WIFEXITED}\texttt{(s)}   & Condizione vera (valore non nullo) per
                                       un processo figlio che sia terminato
                                       normalmente. \\ 
-    \macro{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno
+    \macrod{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno
                                       significativi dello stato di uscita del
                                       processo (passato attraverso
                                       \func{\_exit}, \func{exit} o come valore
                                       di ritorno di \code{main}); può essere
                                       valutata solo se \val{WIFEXITED} ha
                                       restituito un valore non nullo.\\ 
-    \macro{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
+    \macrod{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
                                       terminato in maniera anomala a causa di
                                       un segnale che non è stato catturato
                                       (vedi sez.~\ref{sec:sig_notification}).\\ 
-    \macro{WTERMSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+    \macrod{WTERMSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
                                       causato la terminazione anomala del
                                       processo; può essere valutata solo se
                                       \val{WIFSIGNALED} ha restituito un
                                       valore non nullo.\\
-    \macro{WCOREDUMP}\texttt{(s)}   & Vera se il processo terminato ha
+    \macrod{WCOREDUMP}\texttt{(s)}   & Vera se il processo terminato ha
                                       generato un file di 
                                       \textit{core dump}; può essere valutata
                                       solo se \val{WIFSIGNALED} ha restituito
                                       un valore non nullo.\footnotemark \\
-    \macro{WIFSTOPPED}\texttt{(s)}  & Vera se il processo che ha causato il
+    \macrod{WIFSTOPPED}\texttt{(s)}  & Vera se il processo che ha causato il
                                       ritorno di \func{waitpid} è bloccato;
                                       l'uso è possibile solo con
                                       \func{waitpid} avendo specificato
                                       l'opzione \const{WUNTRACED}.\\
-    \macro{WSTOPSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+    \macrod{WSTOPSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
                                       bloccato il processo; può essere
                                       valutata solo se \val{WIFSTOPPED} ha
                                       restituito un valore non nullo. \\ 
-    \macro{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il
+    \macrod{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il
                                       ritorno è stato riavviato da un
                                       \signal{SIGCONT} (disponibile solo a
                                       partire dal kernel 2.6.10).\\
@@ -1249,16 +1257,16 @@ primo, quale processo o quale gruppo di processi selezionare.
     \textbf{Valore} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{P\_PID} & Indica la richiesta di attendere per un processo figlio
-                     il cui \ids{PID} corrisponda al valore dell'argomento
-                     \param{id}.\\
-    \const{P\_PGID}& Indica la richiesta di attendere per un processo figlio
-                     appartenente al \textit{process group} (vedi
-                     sez.~\ref{sec:sess_proc_group}) il cui \acr{pgid}
-                     corrisponda al valore dell'argomento \param{id}.\\
-    \const{P\_ALL} & Indica la richiesta di attendere per un processo figlio
-                     generico, il valore dell'argomento \param{id} viene
-                     ignorato.\\
+    \constd{P\_PID} & Indica la richiesta di attendere per un processo figlio
+                      il cui \ids{PID} corrisponda al valore dell'argomento
+                      \param{id}.\\
+    \constd{P\_PGID}& Indica la richiesta di attendere per un processo figlio
+                      appartenente al \textit{process group} (vedi
+                      sez.~\ref{sec:sess_proc_group}) il cui \acr{pgid}
+                      corrisponda al valore dell'argomento \param{id}.\\
+    \constd{P\_ALL} & Indica la richiesta di attendere per un processo figlio
+                      generico, il valore dell'argomento \param{id} viene
+                      ignorato.\\
     \hline
   \end{tabular}
   \caption{Costanti per i valori dell'argomento \param{idtype} della funzione
@@ -1286,15 +1294,15 @@ nuovo riceverne lo stato.
     \textbf{Valore} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{WEXITED}   & Ritorna quando un processo figlio è terminato.\\
-    \const{WNOHANG}   & Ritorna immediatamente anche se non c'è niente da
-                        notificare.\\ 
-    \const{WSTOPPED} &  Ritorna quando un processo figlio è stato fermato.\\
-    \const{WCONTINUED}& Ritorna quando un processo figlio che era stato
-                        fermato ha ripreso l'esecuzione.\\
-    \const{WNOWAIT}   & Lascia il processo ancora in attesa di ricezione, così
-                        che una successiva chiamata possa di nuovo riceverne
-                        lo stato.\\
+    \constd{WEXITED}   & Ritorna quando un processo figlio è terminato.\\
+    \constd{WNOHANG}   & Ritorna immediatamente anche se non c'è niente da
+                         notificare.\\ 
+    \constd{WSTOPPED} &  Ritorna quando un processo figlio è stato fermato.\\
+    \constd{WCONTINUED}& Ritorna quando un processo figlio che era stato
+                         fermato ha ripreso l'esecuzione.\\
+    \constd{WNOWAIT}   & Lascia il processo ancora in attesa di ricezione, così
+                         che una successiva chiamata possa di nuovo riceverne
+                         lo stato.\\
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{options}
@@ -1402,7 +1410,7 @@ prototipo è:
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
     directory del \textit{pathname}.
   \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
-    \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
+    \const{PT\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
   \item[\errcode{ELIBBAD}] un interprete ELF non è in un formato
     riconoscibile.
@@ -1664,7 +1672,7 @@ del programma per caricare le librerie necessarie ed effettuare il link
 dell'eseguibile; il formato è ormai in completo disuso, per cui è molto
 probabile che non il relativo supporto non sia disponibile. Se il programma è
 in formato ELF per caricare le librerie dinamiche viene usato l'interprete
-indicato nel segmento \const{PT\_INTERP} previsto dal formato stesso, in
+indicato nel segmento \constd{PT\_INTERP} previsto dal formato stesso, in
 genere questo è \sysfile{/lib/ld-linux.so.1} per programmi collegati con la
 \acr{libc5}, e \sysfile{/lib/ld-linux.so.2} per programmi collegati con la
 \acr{glibc}.
@@ -1685,7 +1693,7 @@ lunghezza massima di 127 caratteri e se questa dimensione viene ecceduta la
 stringa viene troncata; altri Unix hanno dimensioni massime diverse, e diversi
 comportamenti, ad esempio FreeBSD esegue la scansione della riga e la divide
 nei vari argomenti e se è troppo lunga restituisce un errore di
-\const{ENAMETOOLONG}; una comparazione dei vari comportamenti sui diversi
+\errval{ENAMETOOLONG}; una comparazione dei vari comportamenti sui diversi
 sistemi unix-like si trova su
 \url{http://www.in-ulm.de/~mascheck/various/shebang/}.
 
@@ -1851,7 +1859,7 @@ servano di nuovo.
 
 Questo in Linux viene fatto usando altri due gruppi di identificatori, il
 \textit{saved} ed il \textit{filesystem}. Il primo gruppo è lo stesso usato in
-SVr4, e previsto dallo standard POSIX quando è definita la costante
+SVr4, e previsto dallo standard POSIX quando è definita
 \macro{\_POSIX\_SAVED\_IDS},\footnote{in caso si abbia a cuore la portabilità
   del programma su altri Unix è buona norma controllare sempre la
   disponibilità di queste funzioni controllando se questa costante è
@@ -2165,7 +2173,7 @@ gruppi supplementari cui un utente può appartenere. Ogni processo può avere
 almeno \const{NGROUPS\_MAX} gruppi supplementari\footnote{il numero massimo di
   gruppi secondari può essere ottenuto con \func{sysconf} (vedi
   sez.~\ref{sec:sys_limits}), leggendo il parametro
-  \texttt{\_SC\_NGROUPS\_MAX}.} in aggiunta al gruppo primario; questi vengono
+  \const{\_SC\_NGROUPS\_MAX}.} in aggiunta al gruppo primario; questi vengono
 ereditati dal processo padre e possono essere cambiati con queste funzioni.
 
 La funzione di sistema che permette di leggere i gruppi supplementari
@@ -2223,7 +2231,7 @@ dimensioni adeguate.
 Infine per impostare i gruppi supplementari di un processo ci sono due
 funzioni, che possono essere usate solo se si hanno i privilegi di
 amministratore.\footnote{e più precisamente se si ha la \textit{capability}
-  \macro{CAP\_SETGID}.} La prima delle due è la funzione di sistema
+  \const{CAP\_SETGID}.} La prima delle due è la funzione di sistema
 \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a
   differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per
   poterla utilizzare deve essere definita la macro \macro{\_BSD\_SOURCE}.} ed
@@ -2272,13 +2280,12 @@ caso \var{errno} assumerà uno dei valori:
 La funzione esegue la scansione del database dei gruppi (usualmente
 \conffile{/etc/group}) cercando i gruppi di cui è membro l'utente \param{user}
 (di nuovo specificato per nome e non per \ids{UID}) con cui costruisce una
-lista di gruppi supplementari, a cui aggiunge anche
-\param{group}, infine imposta questa lista per il processo corrente usando
-\func{setgroups}.  Si tenga presente che sia \func{setgroups} che
-\func{initgroups} non sono definite nello standard POSIX.1 e che pertanto non
-è possibile utilizzarle quando si definisce \macro{\_POSIX\_SOURCE} o si
-compila con il flag \cmd{-ansi}, è pertanto meglio evitarle se si vuole
-scrivere codice portabile.
+lista di gruppi supplementari, a cui aggiunge anche \param{group}, infine
+imposta questa lista per il processo corrente usando \func{setgroups}.  Si
+tenga presente che sia \func{setgroups} che \func{initgroups} non sono
+definite nello standard POSIX.1 e che pertanto non è possibile utilizzarle
+quando si definisce \macro{\_POSIX\_SOURCE} o si compila con il flag
+\cmd{-ansi}, è pertanto meglio evitarle se si vuole scrivere codice portabile.
 
  
 \section{La gestione della priorità dei processi}
@@ -2502,6 +2509,9 @@ processo corrente, il suo prototipo è:
 \end{errlist}}
 \end{funcproto}
 
+\constbeg{PRIO\_MIN}
+\constbeg{PRIO\_MAX}
+
 L'argomento \param{inc} indica l'incremento da effettuare rispetto al valore
 di \textit{nice} corrente, che può assumere valori compresi fra
 \const{PRIO\_MIN} e \const{PRIO\_MAX}; nel caso di Linux sono fra $-20$ e
@@ -2519,6 +2529,9 @@ priorità di un processo, a partire da questa versione è consentito anche agli
 utenti normali alzare (entro certi limiti, che vedremo in
 sez.~\ref{sec:sys_resource_limit}) la priorità dei propri processi.
 
+\constend{PRIO\_MIN}
+\constend{PRIO\_MAX}
+
 Gli standard SUSv2 e POSIX.1 prevedono che la funzione ritorni il nuovo valore
 di \textit{nice} del processo; tuttavia la \textit{system call} di Linux non
 segue questa convenzione e restituisce sempre $0$ in caso di successo e $-1$
@@ -2582,10 +2595,10 @@ l'utente correnti.
     \param{which} & \param{who} & \textbf{Significato} \\
     \hline
     \hline
-    \const{PRIO\_PROCESS} & \type{pid\_t} & processo  \\
-    \const{PRIO\_PRGR}    & \type{pid\_t} & \textit{process group} (vedi
-                                            sez.~\ref{sec:sess_proc_group})\\
-    \const{PRIO\_USER}    & \type{uid\_t} & utente \\
+    \constd{PRIO\_PROCESS} & \type{pid\_t} & processo  \\
+    \constd{PRIO\_PRGR}    & \type{pid\_t} & \textit{process group} (vedi
+                                             sez.~\ref{sec:sess_proc_group})\\
+    \constd{PRIO\_USER}    & \type{uid\_t} & utente \\
     \hline
   \end{tabular}
   \caption{Legenda del valore dell'argomento \param{which} e del tipo
@@ -2778,17 +2791,17 @@ corrente.
     \textbf{Politica}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{SCHED\_FIFO} & \textit{Scheduling real-time} con politica
-                          \textit{FIFO}. \\
-    \const{SCHED\_RR}   & \textit{Scheduling real-time} con politica
-                          \textit{Round Robin}. \\ 
+    \constd{SCHED\_FIFO} & \textit{Scheduling real-time} con politica
+                           \textit{FIFO}. \\
+    \constd{SCHED\_RR}   & \textit{Scheduling real-time} con politica
+                           \textit{Round Robin}. \\ 
     \hline
-    \const{SCHED\_OTHER}& \textit{Scheduling} ordinario.\\
-    \const{SCHED\_BATCH}& \textit{Scheduling} ordinario con l'assunzione
-                          ulteriore di lavoro \textit{CPU
-                            intensive} (dal kernel 2.6.16).\\ 
-    \const{SCHED\_IDLE} & \textit{Scheduling} di priorità estremamente
-                          bassa (dal kernel 2.6.23).\\
+    \constd{SCHED\_OTHER}& \textit{Scheduling} ordinario.\\
+    \constd{SCHED\_BATCH}& \textit{Scheduling} ordinario con l'assunzione
+                           ulteriore di lavoro \textit{CPU
+                           intensive} (dal kernel 2.6.16).\\ 
+    \constd{SCHED\_IDLE} & \textit{Scheduling} di priorità estremamente
+                           bassa (dal kernel 2.6.23).\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{policy} per la funzione
@@ -2948,8 +2961,8 @@ corrente. Benché la funzione sia utilizzabile anche con processi sottoposti a
 politica ordinaria essa ha senso soltanto per quelli \textit{real-time}, dato
 che per i primi la priorità statica può essere soltanto nulla.  La
 disponibilità di entrambe le funzioni può essere verificata controllando la
-macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è definita nell'\textit{header
-  file} \headfile{sched.h}.
+macro \macrod{\_POSIX\_PRIORITY\_SCHEDULING} che è definita
+nell'\textit{header file} \headfile{sched.h}.
 
 Se invece si vuole sapere quale è politica di \textit{scheduling} di un
 processo si può usare la funzione di sistema \funcd{sched\_getscheduler}, il
@@ -3210,13 +3223,13 @@ se esso è già presente in un insieme, sono le seguenti:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{void \macro{CPU\_ZERO}(cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_ZERO}(cpu\_set\_t *set)}
 \fdesc{Inizializza un insieme di processori vuoto \param{set}.} 
-\fdecl{void \macro{CPU\_SET}(int cpu, cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_SET}(int cpu, cpu\_set\_t *set)}
 \fdesc{Inserisce il processore \param{cpu} nell'insieme di processori \param{set}.} 
-\fdecl{void \macro{CPU\_CLR}(int cpu, cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_CLR}(int cpu, cpu\_set\_t *set)}
 \fdesc{Rimuove il processore \param{cpu} nell'insieme di processori \param{set}.} 
-\fdecl{int \macro{CPU\_ISSET}(int cpu, cpu\_set\_t *set)}
+\fdecl{int \macrod{CPU\_ISSET}(int cpu, cpu\_set\_t *set)}
 \fdesc{Controlla se il processore \param{cpu} è nell'insieme di processori \param{set}.} 
 }
 \end{funcbox}}
@@ -3246,7 +3259,7 @@ volte, l'argomento cioè non deve avere \textsl{effetti collaterali} (in gergo
 
 Le CPU sono numerate da zero (che indica la prima disponibile) fino ad
 un numero massimo che dipende dalla architettura hardware. La costante
-\const{CPU\_SETSIZE} indica il numero massimo di processori che possono far
+\constd{CPU\_SETSIZE} indica il numero massimo di processori che possono far
 parte di un insieme (al momento vale sempre 1024), e costituisce un limite
 massimo al valore dell'argomento \param{cpu}.
 Dalla versione 2.6 della \acr{glibc} alle precedenti macro è stata aggiunta,
@@ -3256,7 +3269,7 @@ per contare il numero di processori in un insieme, l'ulteriore:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{int \macro{CPU\_COUNT}(cpu\_set\_t *set)}
+\fdecl{int \macrod{CPU\_COUNT}(cpu\_set\_t *set)}
 \fdesc{Conta il numero di processori presenti nell'insieme \param{set}.} 
 }
 \end{funcbox}}
@@ -3269,13 +3282,13 @@ compiere delle operazioni logiche sugli insiemi di processori con:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{void \macro{CPU\_AND}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_AND}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue l'AND logico di due insiemi di processori.} 
-\fdecl{void \macro{CPU\_OR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_OR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue l'OR logico di due insiemi di processori.} 
-\fdecl{void \macro{CPU\_XOR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_XOR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue lo XOR logico di due insiemi di processori.} 
-\fdecl{int \macro{CPU\_EQUAL}(cpu\_set\_t *set1, cpu\_set\_t *set2)}
+\fdecl{int \macrod{CPU\_EQUAL}(cpu\_set\_t *set1, cpu\_set\_t *set2)}
 \fdesc{Verifica se due insiemi di processori sono uguali.} 
 }
 \end{funcbox}}
@@ -3304,11 +3317,11 @@ disallocare ed ottenere la dimensione in byte di un insieme di processori:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{cpu\_set\_t * \macro{CPU\_ALLOC}(num\_cpus)}
+\fdecl{cpu\_set\_t * \macrod{CPU\_ALLOC}(num\_cpus)}
 \fdesc{Alloca dinamicamente un insieme di processori di dimensione voluta.} 
-\fdecl{void \macro{CPU\_FREE}(cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_FREE}(cpu\_set\_t *set)}
 \fdesc{Disalloca un insieme di processori allocato dinamicamente.} 
-\fdecl{size\_t \macro{CPU\_ALLOC\_SIZE}(num\_cpus)}
+\fdecl{size\_t \macrod{CPU\_ALLOC\_SIZE}(num\_cpus)}
 \fdesc{Ritorna la dimensione di un insieme di processori allocato dinamicamente.} 
 }
 \end{funcbox}}
@@ -3453,9 +3466,9 @@ sez.~\ref{sec:sess_proc_group}) o tutti i processi di un utente.
     \param{which} & \param{who} & \textbf{Significato} \\
     \hline
     \hline
-    \const{IPRIO\_WHO\_PROCESS} & \type{pid\_t} & processo\\
-    \const{IPRIO\_WHO\_PRGR}    & \type{pid\_t} & \textit{process group}\\ 
-    \const{IPRIO\_WHO\_USER}    & \type{uid\_t} & utente\\
+    \constd{IPRIO\_WHO\_PROCESS} & \type{pid\_t} & processo\\
+    \constd{IPRIO\_WHO\_PRGR}    & \type{pid\_t} & \textit{process group}\\ 
+    \constd{IPRIO\_WHO\_USER}    & \type{uid\_t} & utente\\
     \hline
   \end{tabular}
   \caption{Legenda del valore dell'argomento \param{which} e del tipo
@@ -3472,6 +3485,7 @@ di \textit{scheduling} lo prevede, la priorità del processo all'interno della
 classe stessa. Questo stesso formato viene utilizzato per indicare il valore
 della priorità da impostare con l'argomento \param{ioprio} di
 \func{ioprio\_set}.
+
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -3480,15 +3494,15 @@ della priorità da impostare con l'argomento \param{ioprio} di
     \textbf{Macro} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{IOPRIO\_PRIO\_CLASS}\texttt{(\textit{value})}
+    \macrod{IOPRIO\_PRIO\_CLASS}\texttt{(\textit{value})}
                                 & Dato il valore di una priorità come
                                   restituito da \func{ioprio\_get} estrae il
                                   valore della classe.\\
-    \macro{IOPRIO\_PRIO\_DATA}\texttt{(\textit{value})}
+    \macrod{IOPRIO\_PRIO\_DATA}\texttt{(\textit{value})}
                                 & Dato il valore di una priorità come
                                   restituito da \func{ioprio\_get} estrae il
                                   valore della priorità.\\
-    \macro{IOPRIO\_PRIO\_VALUE}\texttt{(\textit{class},\textit{prio})}
+    \macrod{IOPRIO\_PRIO\_VALUE}\texttt{(\textit{class},\textit{prio})}
                                 & Dato un valore di priorità ed una classe
                                   ottiene il valore numerico da passare a
                                   \func{ioprio\_set}.\\
@@ -3517,9 +3531,11 @@ argomento di \func{ioprio\_set} per eseguire una impostazione.
     \textbf{Classe}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{IOPRIO\_CLASS\_RT}  & \textit{Scheduling} di I/O \textit{real-time}.\\ 
+    \const{IOPRIO\_CLASS\_RT}  & \textit{Scheduling} di I/O
+                                 \textit{real-time}.\\  
     \const{IOPRIO\_CLASS\_BE}  & \textit{Scheduling} di I/O ordinario.\\ 
-    \const{IOPRIO\_CLASS\_IDLE}& \textit{Scheduling} di I/O di priorità minima.\\
+    \const{IOPRIO\_CLASS\_IDLE}& \textit{Scheduling} di I/O di priorità
+                                  minima.\\
     \hline
   \end{tabular}
   \caption{Costanti che identificano le classi di \textit{scheduling} di I/O.}
@@ -3532,7 +3548,7 @@ a quelle già adottate anche nel funzionamento dello \textit{scheduler} del
 processore. Ciascuna di esse è identificata tramite una opportuna costante,
 secondo quanto riportato in tab.~\ref{tab:IOsched_class}.
 
-La classe di priorità più bassa è \const{IOPRIO\_CLASS\_IDLE}; i processi in
+La classe di priorità più bassa è \constd{IOPRIO\_CLASS\_IDLE}; i processi in
 questa classe riescono ad accedere a disco soltanto quando nessun altro
 processo richiede l'accesso. Occorre pertanto usarla con molta attenzione,
 perché un processo in questa classe può venire completamente bloccato quando
@@ -3541,7 +3557,7 @@ accedendo al disco. Quando si usa questa classe non ha senso indicare un
 valore di priorità, dato che in questo caso non esiste nessuna gerarchia e la
 priorità è identica, la minima possibile, per tutti i processi.
 
-La seconda classe di priorità di I/O è \const{IOPRIO\_CLASS\_BE} (il nome sta
+La seconda classe di priorità di I/O è \constd{IOPRIO\_CLASS\_BE} (il nome sta
 per \textit{best-effort}) che è quella usata ordinariamente da tutti
 processi. In questo caso esistono priorità diverse che consentono di
 assegnazione di una maggiore banda passante nell'accesso a disco ad un
@@ -3554,7 +3570,7 @@ priorità maggiore.
 
 
 Infine la classe di priorità di I/O \textit{real-time}
-\const{IOPRIO\_CLASS\_RT} ricalca le omonime priorità di processore: un
+\constd{IOPRIO\_CLASS\_RT} ricalca le omonime priorità di processore: un
 processo in questa classe ha sempre la precedenza nell'accesso a disco
 rispetto a tutti i processi delle altre classi e di un processo nella stessa
 classe ma con priorità inferiore, ed è pertanto in grado di bloccare
@@ -3630,7 +3646,7 @@ predefinite del seguente elenco, che illustra quelle disponibili al
 momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
 
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
+\item[\constd{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
   \textit{capability} (vedi sez.~\ref{sec:proc_capabilities}). La funzione
   ritorna 1 se la capacità specificata nell'argomento \param{arg2} (con una
   delle costanti di tab.~\ref{tab:proc_capabilities}) è presente nel
@@ -3638,7 +3654,7 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   se \param{arg2} non è un valore valido si avrà un errore di \errval{EINVAL}.
   Introdotta a partire dal kernel 2.6.25.
 
-\item[\const{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle
+\item[\constd{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle
   \textit{capabilities} (vedi sez.~\ref{sec:proc_capabilities}) dal processo e
   da tutti i suoi discendenti. La funzione cancella la capacità specificata
   nell'argomento \param{arg2} con una delle costanti di
@@ -3650,7 +3666,7 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   chiamata fallirà con un errore di \errval{EINVAL}. Introdotta a partire dal
   kernel 2.6.25.
 
-\item[\const{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
+\item[\constd{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
   terminazione di un processo a causa di un segnale per il quale è prevista la
   generazione di un file di \textit{core dump} (vedi
   sez.~\ref{sec:sig_standard}) lo genera effettivamente. In genere questo flag
@@ -3671,64 +3687,64 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   \textit{core dump} appartenente all'amministratore in directory dove
   l'utente avrebbe avuto permessi di accesso.
 
-\item[\const{PR\_GET\_DUMPABLE}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_DUMPABLE}] Ottiene come valore di ritorno della funzione
   lo stato corrente del flag che controlla la effettiva generazione dei
   \textit{core dump}. Introdotta a partire dal kernel 2.3.20.
 
-\item[\const{PR\_SET\_ENDIAN}] Imposta la \textit{endianness} del processo
+\item[\constd{PR\_SET\_ENDIAN}] Imposta la \textit{endianness} del processo
   chiamante secondo il valore fornito in \param{arg2}. I valori possibili sono
-  sono: \const{PR\_ENDIAN\_BIG} (\textit{big endian}),
-  \const{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
-  \const{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
+  sono: \constd{PR\_ENDIAN\_BIG} (\textit{big endian}),
+  \constd{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
+  \constd{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
   PowerPC). Introdotta a partire dal kernel 2.6.18, solo per architettura
   PowerPC.
 
-\item[\const{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianness} del
+\item[\constd{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianness} del
   processo chiamante, salvato sulla variabile puntata da \param{arg2} che deve
   essere passata come di tipo ``\ctyp{int *}''. Introdotta a partire dal
   kernel 2.6.18, solo su PowerPC.
 
-\item[\const{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione
+\item[\constd{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione
   della virgola mobile su architettura ia64, secondo il valore
-  di \param{arg2}, si deve passare \const{PR\_FPEMU\_NOPRINT} per emulare in
+  di \param{arg2}, si deve passare \constd{PR\_FPEMU\_NOPRINT} per emulare in
   maniera trasparente l'accesso alle operazioni in virgola mobile, o
-  \const{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale
+  \constd{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale
   \signal{SIGFPE} (vedi sez.~\ref{sec:sig_prog_error}). Introdotta a partire
   dal kernel 2.4.18, solo su architettura ia64.
 
-\item[\const{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo
+\item[\constd{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo
   dell'emulazione della virgola mobile, salvato all'indirizzo puntato
   da \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.4.18, solo su architettura ia64.
 
-\item[\const{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola
+\item[\constd{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola
   mobile (\textit{floating-point exception mode}) al valore di \param{arg2}.
   I valori possibili sono: 
   \begin{itemize*}
-  \item \const{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per le eccezioni,
-  \item \const{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola mobile,
-  \item \const{PR\_FP\_EXC\_OVF} per gli overflow,
-  \item \const{PR\_FP\_EXC\_UND} per gli underflow,
-  \item \const{PR\_FP\_EXC\_RES} per risultati non esatti,
-  \item \const{PR\_FP\_EXC\_INV} per operazioni invalide,
-  \item \const{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni,
-  \item \const{PR\_FP\_EXC\_NONRECOV} per usare la modalità di eccezione
+  \item \constd{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per le eccezioni,
+  \item \constd{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola mobile,
+  \item \constd{PR\_FP\_EXC\_OVF} per gli overflow,
+  \item \constd{PR\_FP\_EXC\_UND} per gli underflow,
+  \item \constd{PR\_FP\_EXC\_RES} per risultati non esatti,
+  \item \constd{PR\_FP\_EXC\_INV} per operazioni invalide,
+  \item \constd{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni,
+  \item \constd{PR\_FP\_EXC\_NONRECOV} per usare la modalità di eccezione
     asincrona non recuperabile,
-  \item \const{PR\_FP\_EXC\_ASYNC} per usare la modalità di eccezione
+  \item \constd{PR\_FP\_EXC\_ASYNC} per usare la modalità di eccezione
     asincrona recuperabile,
-  \item \const{PR\_FP\_EXC\_PRECISE} per la modalità precisa di
+  \item \constd{PR\_FP\_EXC\_PRECISE} per la modalità precisa di
     eccezione.\footnote{trattasi di gestione specialistica della gestione
       delle eccezioni dei calcoli in virgola mobile che, i cui dettagli al
       momento vanno al di là dello scopo di questo testo.}
   \end{itemize*}
 Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 
-\item[\const{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni
+\item[\constd{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni
   delle operazioni in virgola mobile, salvata all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''.  Introdotta
   a partire dal kernel 2.4.21, solo su PowerPC.
 
-\item[\const{PR\_SET\_KEEPCAPS}] Consente di controllare quali
+\item[\constd{PR\_SET\_KEEPCAPS}] Consente di controllare quali
   \textit{capabilities} vengono cancellate quando si esegue un cambiamento di
   \ids{UID} del processo (per i dettagli si veda
   sez.~\ref{sec:proc_capabilities}, in particolare quanto illustrato a
@@ -3740,21 +3756,21 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   sez.~\ref{sec:proc_capabilities} e l'uso di \const{PR\_SET\_SECUREBITS} più
   avanti). Introdotta a partire dal kernel 2.2.18.
 
-\item[\const{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione
   il valore del flag di controllo delle \textit{capabilities} impostato con
   \const{PR\_SET\_KEEPCAPS}. Introdotta a partire dal kernel 2.2.18.
 
-\item[\const{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla
+\item[\constd{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla
   stringa puntata da \param{arg2}, che deve essere di tipo ``\ctyp{char *}''. Il
   nome può essere lungo al massimo 16 caratteri, e la stringa deve essere
   terminata da NUL se più corta.  Introdotta a partire dal kernel 2.6.9.
 
-\item[\const{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella
+\item[\constd{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella
   stringa puntata da \param{arg2}, che deve essere di tipo ``\ctyp{char *}'';
   si devono allocare per questo almeno 16 byte, e il nome sarà terminato da
   NUL se più corto. Introdotta a partire dal kernel 2.6.9.
 
-\item[\const{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un
+\item[\constd{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un
   segnale, che sarà ricevuto dal processo chiamante, in occorrenza della
   terminazione del proprio processo padre; in sostanza consente di invertire
   il ruolo di \signal{SIGCHLD}. Il valore di \param{arg2} deve indicare il
@@ -3762,13 +3778,13 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   automaticamente cancellato per un processo figlio creato con \func{fork}.
   Introdotta a partire dal kernel 2.1.57.
 
-\item[\const{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale
+\item[\constd{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale
   emesso alla terminazione del padre, salvato all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.3.15.
 
 \itindbeg{secure~computing~mode}
-\item[\const{PR\_SET\_SECCOMP}] Imposta il cosiddetto \textit{secure computing
+\item[\constd{PR\_SET\_SECCOMP}] Imposta il cosiddetto \textit{secure computing
     mode} per il processo corrente. Prevede come unica possibilità
   che \param{arg2} sia impostato ad 1. Una volta abilitato il \textit{secure
     computing mode} il processo potrà utilizzare soltanto un insieme
@@ -3794,7 +3810,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % TODO a partire dal kernel 3.17 è stata introdotta la nuova syscall seccomp,
 % vedi http://lwn.net/Articles/600250/ e http://lwn.net/Articles/603321/
 
-\item[\const{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione
   lo stato corrente del \textit{secure computing mode}, al momento attuale la
   funzione è totalmente inutile in quanto l'unico valore ottenibile è 0, dato
   che la chiamata di questa funzione in \textit{secure computing mode}
@@ -3802,7 +3818,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   eventuali estensioni future. Introdotta a partire dal kernel 2.6.23.
 \itindend{secure~computing~mode}
 
-\item[\const{PR\_SET\_SECUREBITS}] Imposta i \textit{securebits} per il
+\item[\constd{PR\_SET\_SECUREBITS}] Imposta i \textit{securebits} per il
   processo chiamante al valore indicato da \param{arg2}; per i dettagli sul
   significato dei \textit{securebits} si veda
   sez.~\ref{sec:proc_capabilities}, ed in particolare i valori di
@@ -3811,35 +3827,35 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   altrimenti la chiamata fallirà con un errore di \errval{EPERM}. Introdotta a
   partire dal kernel 2.6.26.
 
-\item[\const{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della
+\item[\constd{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della
   funzione l'impostazione corrente per i \textit{securebits}. Introdotta a
   partire dal kernel 2.6.26.
 
-\item[\const{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del
+\item[\constd{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del
   processo da indicare con il valore di \param{arg2}, attualmente i valori
-  possibili sono due, con \const{PR\_TIMING\_STATISTICAL} si usa il metodo
-  statistico tradizionale, con \const{PR\_TIMING\_TIMESTAMP} il più accurato
+  possibili sono due, con \constd{PR\_TIMING\_STATISTICAL} si usa il metodo
+  statistico tradizionale, con \constd{PR\_TIMING\_TIMESTAMP} il più accurato
   basato su dei \textit{timestamp}, quest'ultimo però non è ancora
   implementato ed il suo uso comporta la restituzione di un errore di
   \errval{EINVAL}. Introdotta a partire dal kernel 2.6.0-test4.
 
-\item[\const{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione
   il metodo di temporizzazione del processo attualmente in uso (uno dei due
   valori citati per \const{PR\_SET\_TIMING}). Introdotta a partire dal kernel
   2.6.0-test4.
 
-\item[\const{PR\_SET\_TSC}] Imposta il flag che indica se il processo
+\item[\constd{PR\_SET\_TSC}] Imposta il flag che indica se il processo
   chiamante può leggere il registro di processore contenente il contatore dei
   \textit{timestamp} (TSC, o \textit{Time Stamp Counter}) da indicare con il
-  valore di \param{arg2}. Si deve specificare \const{PR\_TSC\_ENABLE} per
-  abilitare la lettura o \const{PR\_TSC\_SIGSEGV} per disabilitarla con la
+  valore di \param{arg2}. Si deve specificare \constd{PR\_TSC\_ENABLE} per
+  abilitare la lettura o \constd{PR\_TSC\_SIGSEGV} per disabilitarla con la
   generazione di un segnale di \signal{SIGSEGV} (vedi
   sez.~\ref{sec:sig_prog_error}). La lettura viene automaticamente
   disabilitata se si attiva il \textit{secure computing mode} (vedi
   \const{PR\_SET\_SECCOMP} più avanti).  Introdotta a partire dal kernel
   2.6.26, solo su x86.
 
-\item[\const{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
+\item[\constd{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
   lettura del contattore dei \textit{timestamp}, salvato all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.6.26, solo su x86.
@@ -3847,11 +3863,11 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % http://blog.cr0.org/2009/05/time-stamp-counter-disabling-oddities.html,
 % http://en.wikipedia.org/wiki/Time_Stamp_Counter 
 
-\item[\const{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso
+\item[\constd{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso
   a indirizzi di memoria non allineati, che in varie architetture risultano
   illegali, da indicare con il valore di \param{arg2}. Si deve specificare il
-  valore \const{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati,
-  ed il valore \const{PR\_UNALIGN\_SIGBUS} per generare un segnale di
+  valore \constd{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati,
+  ed il valore \constd{PR\_UNALIGN\_SIGBUS} per generare un segnale di
   \signal{SIGBUS} (vedi sez.~\ref{sec:sig_prog_error}) in caso di accesso non
   allineato.  Introdotta con diverse versioni su diverse architetture.
 
@@ -3875,10 +3891,10 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   Il comportamento di default prevede che per tutti i processi si applichi la
   politica generale di sistema definita nel file
   \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando
-  per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare
+  per \param{arg2} il valore \constd{PR\_MCE\_KILL\_SET} è possibile impostare
   con il contenuto di \param{arg3} una politica specifica del processo
   chiamante. Si può tornare alla politica di default del sistema utilizzando
-  invece per \param{arg2} il valore \const{PR\_MCE\_KILL\_CLEAR}. In tutti i
+  invece per \param{arg2} il valore \constd{PR\_MCE\_KILL\_CLEAR}. In tutti i
   casi, per compatibilità con eventuali estensioni future, tutti i valori
   degli argomenti non utilizzati devono essere esplicitamente posti a zero,
   pena il fallimento della chiamata con un errore di \errval{EINVAL}.
@@ -3887,9 +3903,9 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   \const{PR\_MCE\_KILL\_SET} i valori di \param{arg3} possono essere soltanto
   due, che corrispondono anche al valore che si trova nell'impostazione
   generale di sistema di \texttt{memory\_failure\_early\_kill}, con
-  \const{PR\_MCE\_KILL\_EARLY} si richiede l'emissione immediata di
+  \constd{PR\_MCE\_KILL\_EARLY} si richiede l'emissione immediata di
   \signal{SIGBUS} non appena viene rilevato un errore, mentre con
-  \const{PR\_MCE\_KILL\_LATE} il segnale verrà inviato solo quando il processo
+  \constd{PR\_MCE\_KILL\_LATE} il segnale verrà inviato solo quando il processo
   tenterà un accesso alla memoria corrotta. Questi due valori corrispondono
   rispettivamente ai valori 1 e 0 di
   \texttt{memory\_failure\_early\_kill}.\footnote{in sostanza nel primo caso
@@ -3898,18 +3914,18 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
     secondo caso prima la pagina di memoria viene tolta dallo spazio degli
     indirizzi di ciascun processo, mentre il segnale viene inviato solo quei
     processi che tentano di accedervi.} Si può usare per \param{arg3} anche un
-  terzo valore, \const{PR\_MCE\_KILL\_DEFAULT}, che corrisponde a impostare
+  terzo valore, \constd{PR\_MCE\_KILL\_DEFAULT}, che corrisponde a impostare
   per il processo la politica di default.\footnote{si presume la politica di
     default corrente, in modo da non essere influenzati da un eventuale
     successivo cambiamento della stessa.} Introdotta a partire dal kernel
   2.6.32.
-\item[\const{PR\_MCE\_KILL\_GET}] Ottiene come valore di ritorno della
+\item[\constd{PR\_MCE\_KILL\_GET}] Ottiene come valore di ritorno della
   funzione la politica di gestione degli errori dovuti a corruzione della
   memoria. Tutti gli argomenti non utilizzati (al momento tutti) devono essere
   nulli pena la ricezione di un errore di \errval{EINVAL}. Introdotta a
   partire dal kernel 2.6.32.
 \itindbeg{child~reaper}
-\item[\const{PR\_SET\_CHILD\_SUBREAPER}] Se \param{arg2} è diverso da zero
+\item[\constd{PR\_SET\_CHILD\_SUBREAPER}] Se \param{arg2} è diverso da zero
   imposta l'attributo di \textit{child reaper} per il processo, se nullo lo
   cancella. Lo stato di \textit{child reaper} è una funzionalità, introdotta
   con il kernel 3.4, che consente di far svolgere al processo che ha questo
@@ -3926,7 +3942,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   con lo stato di \textit{child reaper} termina prima dei suoi discendenti,
   svolgerà questo ruolo il più prossimo antenato ad avere lo stato di
   \textit{child reaper}, 
-\item[\const{PR\_GET\_CHILD\_SUBREAPER}] Ottiene l'impostazione relativa allo
+\item[\constd{PR\_GET\_CHILD\_SUBREAPER}] Ottiene l'impostazione relativa allo
   lo stato di \textit{child reaper} del processo chiamante, salvata come
   \textit{value result} all'indirizzo puntato da \param{arg2} (da indicare
   come di tipo \code{int *}). Il valore viene letto come valore logico, se
@@ -4107,18 +4123,18 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 
 \begin{basedescript}{\desclabelwidth{1.5 cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\const{CLONE\_CHILD\_CLEARTID}] cancella il valore del \textit{thread
+\item[\constd{CLONE\_CHILD\_CLEARTID}] cancella il valore del \textit{thread
     ID} posto all'indirizzo dato dall'argomento \param{ctid}, eseguendo un
   riattivazione del \textit{futex} (vedi sez.~\ref{sec:xxx_futex}) a
   quell'indirizzo. Questo flag viene utilizzato dalla librerie di gestione dei
   \textit{thread} ed è presente dal kernel 2.5.49.
 
-\item[\const{CLONE\_CHILD\_SETTID}] scrive il \ids{TID} del \textit{thread}
+\item[\constd{CLONE\_CHILD\_SETTID}] scrive il \ids{TID} del \textit{thread}
   figlio all'indirizzo dato dall'argomento \param{ctid}. Questo flag viene
   utilizzato dalla librerie di gestione dei \textit{thread} ed è presente dal
   kernel 2.5.49.
 
-\item[\const{CLONE\_FILES}] se impostato il nuovo processo condividerà con il
+\item[\constd{CLONE\_FILES}] se impostato il nuovo processo condividerà con il
   padre la \textit{file descriptor table} (vedi sez.~\ref{sec:file_fd}),
   questo significa che ogni \textit{file descriptor} aperto da un processo
   verrà visto anche dall'altro e che ogni chiusura o cambiamento dei
@@ -4131,7 +4147,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   ordinario di un sistema unix-like e che illustreremo in dettaglio in
   sez.~\ref{sec:file_shared_access}.
 
-\item[\const{CLONE\_FS}] se questo flag viene impostato il nuovo processo
+\item[\constd{CLONE\_FS}] se questo flag viene impostato il nuovo processo
   condividerà con il padre le informazioni relative all'albero dei file, ed in
   particolare avrà la stessa radice (vedi sez.~\ref{sec:file_chroot}), la
   stessa directory di lavoro (vedi sez.~\ref{sec:file_work_dir}) e la stessa
@@ -4141,7 +4157,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   informazioni, che saranno così indipendenti per i due processi, come avviene
   nel comportamento ordinario di un sistema unix-like.
 
-\item[\const{CLONE\_IO}] se questo flag viene impostato il nuovo il nuovo
+\item[\constd{CLONE\_IO}] se questo flag viene impostato il nuovo il nuovo
   processo condividerà con il padre il contesto dell'I/O, altrimenti, come
   come avviene nel comportamento ordinario con una \func{fork} otterrà un suo
   contesto dell'I/O. 
@@ -4157,7 +4173,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 %TODO : tutti i CLONE_NEW* attengono ai namespace, ed è meglio metterli nella
 %relativa sezione da creare a parte
 
-% \item[\const{CLONE\_NEWIPC}] è uno dei flag ad uso dei \textit{container},
+% \item[\constd{CLONE\_NEWIPC}] è uno dei flag ad uso dei \textit{container},
 %   introdotto con il kernel 2.6.19. L'uso di questo flag crea per il nuovo
 %   processo un nuovo \textit{namespace} per il sistema di IPC, sia per quello
 %   di SysV (vedi sez.~\ref{sec:ipc_sysv}) che, dal kernel 2.6.30, per le code
@@ -4169,23 +4185,34 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 %   la capacità \const{CAP\_SYS\_ADMIN}) e non può essere usato in combinazione
 %   con \const{CLONE\_SYSVSEM}. 
 
-% \item[\const{CLONE\_NEWNET}]
-% \item[\const{CLONE\_NEWNS}]
-% \item[\const{CLONE\_NEWPID}]
-% \item[\const{CLONE\_NEWUTS}]
-
-\item[\const{CLONE\_PARENT}]
-\item[\const{CLONE\_PARENT\_SETTID}]
-\item[\const{CLONE\_PID}]
-\item[\const{CLONE\_PTRACE}]
-\item[\const{CLONE\_SETTLS}]
-\item[\const{CLONE\_SIGHAND}]
-\item[\const{CLONE\_STOPPED}]
-\item[\const{CLONE\_SYSVSEM}]
-\item[\const{CLONE\_THREAD}]
-\item[\const{CLONE\_UNTRACED}]
-\item[\const{CLONE\_VFORK}]
-\item[\const{CLONE\_VM}] se questo flag viene impostato il nuovo processo
+% \item[\constd{CLONE\_NEWNET}]
+% \item[\constd{CLONE\_NEWNS}]
+% \item[\constd{CLONE\_NEWPID}]
+% \item[\constd{CLONE\_NEWUTS}]
+
+\item[\constd{CLONE\_PARENT}]
+\item[\constd{CLONE\_PARENT\_SETTID}]
+\item[\constd{CLONE\_PID}]
+
+\item[\constd{CLONE\_PTRACE}] se questo flag viene impostato ed il processo
+  chiamante viene tracciato (vedi sez.~\ref{sec:process_ptrace}) anche il
+  figlio viene tracciato. 
+
+\item[\constd{CLONE\_SETTLS}]
+\item[\constd{CLONE\_SIGHAND}]
+\item[\constd{CLONE\_STOPPED}]
+\item[\constd{CLONE\_SYSVSEM}]
+\item[\constd{CLONE\_THREAD}]
+
+\item[\constd{CLONE\_UNTRACED}] se questo flag viene impostato un processo non
+  può più forzare \const{CLONE\_PTRACE} su questo processo.
+
+\item[\constd{CLONE\_VFORK}] se questo flag viene impostato il chiamante viene
+  fermato fintato che il figlio appena creato non rilascia la sua memoria
+  virtuale con una chiamata a \func{exec} o \func{exit}, viene quindi
+  replicato il comportamento di \func{vfork}.
+
+\item[\constd{CLONE\_VM}] se questo flag viene impostato il nuovo processo
   condividerà con il padre la stessa memoria virtuale, e le scritture in
   memoria fatte da uno qualunque dei processi saranno visibili dall'altro,
   così come ogni mappatura in memoria (vedi sez.~\ref{sec:file_memory_map}). 
@@ -4336,7 +4363,7 @@ assumere che, in ogni piattaforma su cui è implementato Linux, il tipo
 atomici. Non è affatto detto che lo stesso valga per interi di dimensioni
 maggiori (in cui l'accesso può comportare più istruzioni in assembler) o per
 le strutture di dati. In tutti questi casi è anche opportuno marcare come
-\direct{volatile} le variabili che possono essere interessate ad accesso
+\dirct{volatile} le variabili che possono essere interessate ad accesso
 condiviso, onde evitare problemi con le ottimizzazioni del codice.
 
 
@@ -4446,8 +4473,8 @@ parte del programmatore.
 
 In genere le funzioni di libreria non sono rientranti, molte di esse ad
 esempio utilizzano variabili statiche, la \acr{glibc} però mette a
-disposizione due macro di compilatore, \macro{\_REENTRANT} e
-\macro{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
+disposizione due macro di compilatore, \macrod{\_REENTRANT} e
+\macrod{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
 varie funzioni di libreria, che sono identificate aggiungendo il suffisso
 \code{\_r} al nome della versione normale.
 
@@ -4477,7 +4504,7 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso
 % LocalWords:  setreuid setregid FIXME ruid rgid seteuid setegid setresuid size
 % LocalWords:  setresgid getresuid getresgid value result argument setfsuid DAC
 % LocalWords:  setfsgid NGROUPS sysconf getgroups getgrouplist groups ngroups
-% LocalWords:  setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary PF
+% LocalWords:  setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary 
 % LocalWords:  SEARCH chattr sticky NOATIME socket domain immutable append mmap
 % LocalWords:  broadcast multicast multicasting memory locking mlock mlockall
 % LocalWords:  shmctl ioperm iopl chroot ptrace accounting swap reboot hangup
index bde6dfc..4463fb0 100644 (file)
@@ -341,7 +341,7 @@ esse sono definite nell'header di sistema \headfile{signal.h}.
     \signal{SIGILL}  &PA& C & Istruzione illecita.\\
     \signal{SIGTRAP} &S & C & Trappole per un Trace/breakpoint.\\
     \signal{SIGABRT} &PA& C & Segnale di abort da \func{abort}.\\
-    \signal{SIGIOT}  &B & C & Trappola di I/O. Sinonimo di \signal{SIGABRT}.\\
+    \signald{SIGIOT}  &B & C & Trappola di I/O. Sinonimo di \signal{SIGABRT}.\\
     \signal{SIGBUS}  &BS& C & Errore sul bus (bad memory access).\\
     \signal{SIGFPE}  &AP& C & Errore aritmetico.\\
     \signal{SIGKILL} &P & T& Segnale di terminazione forzata.\\
@@ -373,7 +373,7 @@ esse sono definite nell'header di sistema \headfile{signal.h}.
     \signal{SIGSYS}  &VS& C & \textit{system call} sbagliata.\\
     \hline
     \signal{SIGSTKFLT}&?& T & Errore sullo stack del coprocessore (inusato).\\
-    \signal{SIGUNUSED}&?& C & Segnale inutilizzato (sinonimo di
+    \signald{SIGUNUSED}&?& C & Segnale inutilizzato (sinonimo di
                                \signal{SIGSYS}).\\
     \hline
     \signal{SIGCLD}  &V & I & Sinonimo di \signal{SIGCHLD}.\\
@@ -498,7 +498,7 @@ la registrazione su disco di un file di \textit{core dump}, che un debugger
 può usare per ricostruire lo stato del programma al momento della
 terminazione.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
+\item[\signald{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
   aritmetici compresa la divisione per zero e l'overflow.  Se il gestore
   ritorna il comportamento del processo è indefinito, ed ignorare questo
@@ -510,7 +510,7 @@ terminazione.  Questi segnali sono:
 %   aritmetiche e richiede che esse siano notificate.
 % TODO trovare altre info su SIGFPE e trattare la notifica delle eccezioni 
   
-\item[\signal{SIGILL}] Il nome deriva da \textit{illegal instruction},
+\item[\signald{SIGILL}] Il nome deriva da \textit{illegal instruction},
   significa che il programma sta cercando di eseguire una istruzione
   privilegiata o inesistente, in generale del codice illecito. Poiché il
   compilatore del C genera del codice valido si ottiene questo segnale se il
@@ -522,16 +522,16 @@ terminazione.  Questi segnali sono:
   problemi nell'esecuzione di un gestore.  Se il gestore ritorna il
   comportamento del processo è indefinito.
 
-\item[\signal{SIGSEGV}] Il nome deriva da \itindex{segment~violation}
-  \textit{segment violation}, e significa che il programma sta cercando di
-  leggere o scrivere in una zona di memoria protetta al di fuori di quella che
-  gli è stata riservata dal sistema. In genere è il meccanismo della
-  protezione della memoria che si accorge dell'errore ed il kernel genera il
-  segnale.  È tipico ottenere questo segnale dereferenziando un puntatore
-  nullo o non inizializzato leggendo al di là della fine di un vettore.  Se il
-  gestore ritorna il comportamento del processo è indefinito.
+\item[\signald{SIGSEGV}] Il nome deriva da \textit{segment violation}, e
+  significa che il programma sta cercando di leggere o scrivere in una zona di
+  memoria protetta al di fuori di quella che gli è stata riservata dal
+  sistema. In genere è il meccanismo della protezione della memoria che si
+  accorge dell'errore ed il kernel genera il segnale.  È tipico ottenere
+  questo segnale dereferenziando un puntatore nullo o non inizializzato
+  leggendo al di là della fine di un vettore.  Se il gestore ritorna il
+  comportamento del processo è indefinito.
 
-\item[\signal{SIGBUS}] Il nome deriva da \textit{bus error}. Come
+\item[\signald{SIGBUS}] Il nome deriva da \textit{bus error}. Come
   \signal{SIGSEGV} questo è un segnale che viene generato di solito quando si
   dereferenzia un puntatore non inizializzato, la differenza è che
   \signal{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
@@ -539,19 +539,19 @@ terminazione.  Questi segnali sono:
   \signal{SIGBUS} indica l'accesso ad un indirizzo non valido, come nel caso
   di un puntatore non allineato.
 
-\item[\signal{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica
+\item[\signald{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica
   che il programma stesso ha rilevato un errore che viene riportato chiamando
   la funzione \func{abort}, che genera questo segnale.
 
-\item[\signal{SIGTRAP}] È il segnale generato da un'istruzione di breakpoint o
+\item[\signald{SIGTRAP}] È il segnale generato da un'istruzione di breakpoint o
   dall'attivazione del tracciamento per il processo. È usato dai programmi per
   il debugging e un programma normale non dovrebbe ricevere questo segnale.
 
-\item[\signal{SIGSYS}] Sta ad indicare che si è eseguita una istruzione che
+\item[\signald{SIGSYS}] Sta ad indicare che si è eseguita una istruzione che
   richiede l'esecuzione di una \textit{system call}, ma si è fornito un codice
   sbagliato per quest'ultima. 
 
-\item[\signal{SIGEMT}] Il nome sta per \textit{emulation trap}. Il segnale non
+\item[\signald{SIGEMT}] Il nome sta per \textit{emulation trap}. Il segnale non
   è previsto da nessuno standard ed è definito solo su alcune architetture che
   come il vecchio PDP11 prevedono questo tipo di interruzione, non è presente
   sui normali PC.
@@ -573,20 +573,20 @@ funzionamento (come il modo del terminale o le impostazioni di una qualche
 periferica). L'azione predefinita di questi segnali è di terminare il
 processo, questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGTERM}] Il nome sta per \textit{terminate}. È un segnale
+\item[\signald{SIGTERM}] Il nome sta per \textit{terminate}. È un segnale
   generico usato per causare la conclusione di un programma. È quello che
   viene generato di default dal comando \cmd{kill}.  Al contrario di
   \signal{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo
   si usa per chiedere in maniera ``\textsl{educata}'' ad un processo di
   concludersi.
 
-\item[\signal{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
+\item[\signald{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
   interruzione per il programma. È quello che viene generato di default dal
   dall'invio sul terminale del carattere di controllo ``\textit{INTR}'',
   \textit{interrupt} appunto, che viene generato normalmente dalla sequenza
   \cmd{C-c} sulla tastiera.
 
-\item[\signal{SIGQUIT}] È analogo a \signal{SIGINT} con la differenza che è
+\item[\signald{SIGQUIT}] È analogo a \signal{SIGINT} con la differenza che è
   controllato da un altro carattere di controllo, ``\textit{QUIT}'',
   corrispondente alla sequenza \texttt{C-\bslash} sulla tastiera. A differenza
   del precedente l'azione predefinita, oltre alla terminazione del processo,
@@ -597,7 +597,7 @@ processo, questi segnali sono:
   (tipo la cancellazione di file temporanei), dato che in certi casi esse
   possono eliminare informazioni utili nell'esame dei \textit{core dump}.
 
-\item[\signal{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
+\item[\signald{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
   qualunque programma. Questo segnale non può essere né intercettato, né
   ignorato, né bloccato, per cui causa comunque la terminazione del processo.
   In genere esso viene generato solo per richiesta esplicita dell'utente dal
@@ -612,7 +612,7 @@ processo, questi segnali sono:
   per condizioni particolari il processo non può più essere eseguito neanche
   per eseguire un gestore.
 
-\item[\signal{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
+\item[\signald{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
   terminale dell'utente si è disconnesso, ad esempio perché si è interrotta la
   rete. Viene usato anche per riportare la terminazione del processo di
   controllo di un terminale a tutti i processi della sessione (vedi
@@ -634,15 +634,15 @@ causare la terminazione del programma, ma con questi segnali la scelta
 predefinita è irrilevante, in quanto il loro uso presuppone sempre la
 necessità di un gestore.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
+\item[\signald{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
   un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente
   usato dalla funzione \func{alarm}.
 
-\item[\const{SIVGTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
+\item[\signald{SIVGTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
   precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
   processo. 
 
-\item[\signal{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
+\item[\signald{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
   di un timer che misura sia il tempo di CPU speso direttamente dal processo
   che quello che il sistema ha speso per conto di quest'ultimo. In genere
   viene usato dagli strumenti che servono a fare la profilazione dell'utilizzo
@@ -658,18 +658,18 @@ questo occorre comunque usare \func{fcntl} per abilitare un file descriptor a
 generare questi segnali.  L'azione predefinita è di essere ignorati. Questi
 segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGIO}] Questo segnale viene inviato quando un file descriptor è
+\item[\signald{SIGIO}] Questo segnale viene inviato quando un file descriptor è
   pronto per eseguire dell'input/output. In molti sistemi solo i socket e i
   terminali possono generare questo segnale, in Linux questo può essere usato
   anche per i file, posto che la chiamata a \func{fcntl} che lo attiva abbia
   avuto successo.
 
-\item[\signal{SIGURG}] Questo segnale è inviato quando arrivano dei dati
+\item[\signald{SIGURG}] Questo segnale è inviato quando arrivano dei dati
   urgenti o \itindex{out-of-band} \textit{out-of-band} su di un
   socket; per maggiori dettagli al proposito si veda
   sez.~\ref{sec:TCP_urgent_data}.
 
-\item[\signal{SIGPOLL}] Questo segnale è definito nella standard POSIX.1-2001,
+\item[\signald{SIGPOLL}] Questo segnale è definito nella standard POSIX.1-2001,
   ed è equivalente a \signal{SIGIO} che invece deriva da BSD. Su Linux è
   definito per compatibilità con i sistemi System V.
 \end{basedescript}
@@ -682,15 +682,15 @@ Questi sono i segnali usati dal controllo delle sessioni e dei processi, il
 loro uso è specializzato e viene trattato in maniera specifica nelle sezioni
 in cui si trattano gli argomenti relativi.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
+\item[\signald{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
   figlio termina o viene fermato. L'azione predefinita è di ignorare il
   segnale, la sua gestione è trattata in sez.~\ref{sec:proc_wait}.
 
-\item[\signal{SIGCLD}] Per Linux questo è solo un segnale identico al
+\item[\signald{SIGCLD}] Per Linux questo è solo un segnale identico al
   precedente e definito come sinonimo. Il nome è obsoleto, deriva dalla
   definizione del segnale su System V, ed oggi deve essere evitato.
 
-\item[\signal{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
+\item[\signald{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
   usato per fare ripartire un programma precedentemente fermato da
   \signal{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
   ripartire il processo prima della sua consegna. Il comportamento predefinito
@@ -705,11 +705,11 @@ in cui si trattano gli argomenti relativi.  Questi segnali sono:
   se viene fermato e riavviato, come per esempio riscrivere un prompt, o
   inviare un avviso. 
 
-\item[\signal{SIGSTOP}] Il segnale ferma l'esecuzione di un processo, lo porta
+\item[\signald{SIGSTOP}] Il segnale ferma l'esecuzione di un processo, lo porta
   cioè nello stato \textit{stopped} (vedi sez.~\ref{sec:proc_sched}). Il
   segnale non può essere né intercettato, né ignorato, né bloccato.
 
-\item[\signal{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
+\item[\signald{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
   ferma il processo interattivamente, ed è generato dal carattere
   ``\textit{SUSP}'', prodotto dalla combinazione di tasti \cmd{C-z}, ed al
   contrario di \signal{SIGSTOP} può essere intercettato e ignorato. In genere
@@ -718,14 +718,14 @@ in cui si trattano gli argomenti relativi.  Questi segnali sono:
   esempio un programma ha disabilitato l'eco sul terminale può installare un
   gestore per riabilitarlo prima di fermarsi.
 
-\item[\signal{SIGTTIN}] Un processo non può leggere dal terminale se esegue
+\item[\signald{SIGTTIN}] Un processo non può leggere dal terminale se esegue
   una sessione di lavoro in \textit{background}. Quando un processo in
   \textit{background} tenta di leggere da un terminale viene inviato questo
   segnale a tutti i processi della sessione di lavoro. L'azione predefinita è
   di fermare il processo.  L'argomento è trattato in
   sez.~\ref{sec:sess_job_control_overview}.
 
-\item[\signal{SIGTTOU}] Segnale analogo al precedente \signal{SIGTTIN}, ma
+\item[\signald{SIGTTOU}] Segnale analogo al precedente \signal{SIGTTIN}, ma
   generato quando si tenta di scrivere sul terminale o modificarne uno dei
   modi con un processo in \textit{background}. L'azione predefinita è di
   fermare il processo, l'argomento è trattato in
@@ -742,7 +742,7 @@ che impediscono il completamento dell'esecuzione dovute all'interazione con il
 resto del sistema.  L'azione predefinita di questi segnali è normalmente
 quella di terminare il processo, questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle
+\item[\signald{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle
   \textit{pipe}, (o delle FIFO o dei socket) è necessario, prima che un
   processo inizi a scrivere su una di esse, che un altro l'abbia aperta in
   lettura (si veda sez.~\ref{sec:ipc_pipes}). Se il processo in lettura non è
@@ -751,21 +751,21 @@ quella di terminare il processo, questi segnali sono:
   ignorato la chiamata che lo ha causato fallisce, restituendo l'errore
   \errcode{EPIPE}.
 
-\item[\signal{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. Questo
+\item[\signald{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. Questo
   segnale è generato quando un processo eccede il limite impostato per il
   tempo di CPU disponibile, vedi sez.~\ref{sec:sys_resource_limit}. Fino al
   kernel 2.2 terminava semplicemente il processo, a partire dal kernel 2.4,
   seguendo le indicazioni dello standard POSIX.1-2001 viene anche generato un
   \textit{core dump}.
 
-\item[\signal{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo
+\item[\signald{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo
   segnale è generato quando un processo tenta di estendere un file oltre le
   dimensioni specificate dal limite impostato per le dimensioni massime di un
   file, vedi sez.~\ref{sec:sys_resource_limit}.  Fino al kernel 2.2 terminava
   semplicemente il processo, a partire dal kernel 2.4, seguendo le indicazioni
   dello standard POSIX.1-2001 viene anche generato un \textit{core dump}.
 
-\item[\signal{SIGLOST}] Sta per \textit{Resource lost}. Tradizionalmente è il
+\item[\signald{SIGLOST}] Sta per \textit{Resource lost}. Tradizionalmente è il
   segnale che viene generato quando si perde un advisory lock su un file su
   NFS perché il server NFS è stato riavviato. Il progetto GNU lo utilizza per
   indicare ad un client il crollo inaspettato di un server. In Linux è
@@ -779,31 +779,31 @@ quella di terminare il processo, questi segnali sono:
 Raccogliamo qui infine una serie di segnali che hanno scopi differenti non
 classificabili in maniera omogenea. Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\signal{SIGUSR1}] Insieme a \signal{SIGUSR2} è un segnale a disposizione
+\item[\signald{SIGUSR1}] Insieme a \signal{SIGUSR2} è un segnale a disposizione
   dell'utente che lo può usare per quello che vuole. Viene generato solo
   attraverso l'invocazione della funzione \func{kill}. Entrambi i segnali
   possono essere utili per implementare una comunicazione elementare fra
   processi diversi, o per eseguire a richiesta una operazione utilizzando un
   gestore. L'azione predefinita è di terminare il processo.
-\item[\signal{SIGUSR2}] È il secondo segnale a disposizione degli utenti. Per
+\item[\signald{SIGUSR2}] È il secondo segnale a disposizione degli utenti. Per
   il suo utilizzo vale esattamente quanto appena detto per \signal{SIGUSR1}.
-\item[\signal{SIGWINCH}] Il nome sta per \textit{window (size) change} e viene
+\item[\signald{SIGWINCH}] Il nome sta per \textit{window (size) change} e viene
   generato in molti sistemi (GNU/Linux compreso) quando le dimensioni (in
   righe e colonne) di un terminale vengono cambiate. Viene usato da alcuni
   programmi testuali per riformattare l'uscita su schermo quando si cambia
   dimensione a quest'ultimo. L'azione predefinita è di essere ignorato.
-\item[\signal{SIGINFO}] Il segnale indica una richiesta di informazioni. È
+\item[\signald{SIGINFO}] Il segnale indica una richiesta di informazioni. È
   usato con il controllo di sessione, causa la stampa di informazioni da parte
   del processo leader del gruppo associato al terminale di controllo, gli
   altri processi lo ignorano. Su Linux però viene utilizzato come sinonimo di
   \signal{SIGPWR} e l'azione predefinita è di terminare il processo.
-\item[\signal{SIGPWR}] Il segnale indica un cambio nello stato di
+\item[\signald{SIGPWR}] Il segnale indica un cambio nello stato di
   alimentazione di un eventuale gruppo di continuità e viene usato
   principalmente per segnalare l'assenza ed il ritorno della corrente. Viene
   usato principalmente con \cmd{init} per attivare o fermare le procedure di
   spegnimento automatico all'esaurimento delle batterie. L'azione predefinita
   è di terminare il processo.
-\item[\signal{SIGSTKFLT}] Indica un errore nello stack del coprocessore
+\item[\signald{SIGSTKFLT}] Indica un errore nello stack del coprocessore
   matematico, è definito solo per le architetture PC, ma è completamente
   inusato. L'azione predefinita è di terminare il processo.
 \end{basedescript}
@@ -2148,7 +2148,10 @@ permette di usare un gestore più complesso, in grado di ricevere informazioni
 più dettagliate dal sistema, attraverso la struttura \struct{siginfo\_t},
 riportata in fig.~\ref{fig:sig_siginfo_t}.  I due campi devono essere usati in
 maniera alternativa, in certe implementazioni questi campi vengono addirittura
-definiti come una \direct{union}.
+definiti come una \direct{union}.\footnote{la direttiva \direct{union} del
+  linguaggio C definisce una variabile complessa, analoga a una stuttura, i
+  cui campi indicano i diversi tipi di valori che possono essere salvati, in
+  maniera alternativa, all'interno della stessa.}
 
 Installando un gestore di tipo \var{sa\_sigaction} diventa allora possibile
 accedere alle informazioni restituite attraverso il puntatore a questa
@@ -2188,7 +2191,7 @@ altre informazioni specifiche.
 \begin{table}[!htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|p{8cm}|}
+  \begin{tabular}[c]{|l|p{10cm}|}
     \hline
     \textbf{Valore} & \textbf{Significato} \\
     \hline
@@ -2266,12 +2269,12 @@ riferimento.
     \const{TRAP\_BRKPT}  & Breakpoint sul processo.\\
     \const{TRAP\_TRACE}  & Trappola di tracciamento del processo.\\
     \hline
-    \const{CLD\_EXITED}  & Il figlio è uscito.\\
-    \const{CLD\_KILLED}  & Il figlio è stato terminato.\\
-    \const{CLD\_DUMPED}  & Il figlio è terminato in modo anormale.\\
-    \const{CLD\_TRAPPED} & Un figlio tracciato ha raggiunto una trappola.\\
-    \const{CLD\_STOPPED} & Il figlio è stato fermato.\\
-    \const{CLD\_CONTINUED}& Il figlio è ripartito.\\
+    \constd{CLD\_EXITED}  & Il figlio è uscito.\\
+    \constd{CLD\_KILLED}  & Il figlio è stato terminato.\\
+    \constd{CLD\_DUMPED}  & Il figlio è terminato in modo anormale.\\
+    \constd{CLD\_TRAPPED} & Un figlio tracciato ha raggiunto una trappola.\\
+    \constd{CLD\_STOPPED} & Il figlio è stato fermato.\\
+    \constd{CLD\_CONTINUED}& Il figlio è ripartito.\\
     \hline
     \const{POLL\_IN}   & Disponibili dati in ingresso.\\
     \const{POLL\_OUT}  & Spazio disponibile sul buffer di uscita.\\
@@ -2289,7 +2292,7 @@ riferimento.
 \end{table}
 
 Il resto della struttura \struct{siginfo\_t} è definito come una
-\direct{union} ed i valori eventualmente presenti dipendono dal segnale
+\dirct{union} ed i valori eventualmente presenti dipendono dal segnale
 ricevuto, così \signal{SIGCHLD} ed i segnali \textit{real-time} (vedi
 sez.~\ref{sec:sig_real_time}) inviati tramite \func{kill} avvalorano
 \var{si\_pid} e \var{si\_uid} coi valori corrispondenti al processo che ha
@@ -2344,7 +2347,7 @@ semplificare la definizione si è poi definito un apposito tipo
 gestore di segnale.
 
 Si noti come, essendo la funzione estremamente semplice, essa è definita come
-\direct{inline}. Questa direttiva viene usata per dire al compilatore di
+\dirct{inline}. Questa direttiva viene usata per dire al compilatore di
 trattare la funzione cui essa fa riferimento in maniera speciale inserendo il
 codice direttamente nel testo del programma.  Anche se i compilatori più
 moderni sono in grado di effettuare da soli queste manipolazioni (impostando
@@ -2547,7 +2550,7 @@ principale, cosa che ad esempio può rendere problematico chiamare all'interno
 di un gestore di segnali la stessa funzione che dal segnale è stata
 interrotta.
 
-\index{funzioni!sicure|(}
+\index{funzioni!\textit{signal safe}|(}
 
 Il concetto è comunque più generale e porta ad una distinzione fra quelle che
 POSIX chiama \textsl{funzioni insicure} (\textit{signal unsafe function}) e
@@ -2610,7 +2613,7 @@ fig.~\ref{fig:sig_safe_functions}.
   \label{fig:sig_safe_functions}
 \end{figure}
 
-\index{funzioni!sicure|)}
+\index{funzioni!\textit{signal safe}|)}
 
 Lo standard POSIX.1-2004 modifica la lista di
 fig.~\ref{fig:sig_safe_functions} aggiungendo le funzioni \func{\_Exit} e
@@ -2698,7 +2701,7 @@ Tutte queste nuove funzionalità eccetto l'ultima, che, come illustrato in
 sez.~\ref{sec:sig_sigaction}, è disponibile anche con i segnali ordinari, si
 applicano solo ai nuovi segnali \textit{real-time}; questi ultimi sono
 accessibili in un intervallo di valori specificati dalle due costanti
-\const{SIGRTMIN} e \const{SIGRTMAX}, che specificano il numero minimo e
+\constd{SIGRTMIN} e \constd{SIGRTMAX}, che specificano il numero minimo e
 massimo associato ad un segnale \textit{real-time}.
 
 Su Linux di solito il primo valore è 33, mentre il secondo è \code{\_NSIG-1},
@@ -2760,7 +2763,7 @@ mentre per la restituzione dei dati viene usato il campo \var{si\_value}.
 \end{figure}
 
 Detto campo, identificato con il tipo di dato \type{sigval\_t}, è una
-\direct{union} di tipo \struct{sigval} (la sua definizione è in
+\dirct{union} di tipo \struct{sigval} (la sua definizione è in
 fig.~\ref{fig:sig_sigval}) in cui può essere memorizzato o un valore numerico,
 se usata nella forma \var{sival\_int}, o un puntatore, se usata nella forma
 \var{sival\_ptr}. L'unione viene usata dai segnali \textit{real-time} e da
@@ -3340,7 +3343,7 @@ effettuata. Diventa così possibile indicare l'uso di un segnale o l'esecuzione
                              segnale è stato installato con
                              \const{SA\_SIGINFO} gli verrà restituito il
                              valore specificato con \var{sigev\_value} (una
-                             \direct{union} \texttt{sigval}, la cui definizione
+                             \dirct{union} \texttt{sigval}, la cui definizione
                              è in fig.~\ref{fig:sig_sigval}) come valore del
                              campo \var{si\_value} di \struct{siginfo\_t}.\\
     \const{SIGEV\_THREAD}  & La notifica viene effettuata creando un nuovo
index d94093e..dbe5ae3 100644 (file)
@@ -2358,7 +2358,7 @@ programmazione dei socket.  Per questo motivo faremo in questa sezione un
 approfondimento sul significato delle opzioni generiche più importanti.
 
 
-\index{costante!{SO\_KEEPALIVE}@{{\tt  {SO\_KEEPALIVE}}}|(}
+\constbeg{SO\_KEEPALIVE}
 \subsubsection{L'opzione \const{SO\_KEEPALIVE}}
 
 La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di
@@ -2460,11 +2460,11 @@ tutte le volte che un processo figlio viene eseguito in risposta ad una
 connessione verrà pertanto eseguita o meno la sezione (\texttt{\small 14--17})
 che esegue l'impostazione di \const{SO\_KEEPALIVE} sul socket connesso,
 attivando il relativo comportamento.
-\index{costante!{SO\_KEEPALIVE}@{{\tt  {SO\_KEEPALIVE}}}|)}
+\constend{SO\_KEEPALIVE}
 
 
 
-\index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|(}
+\constbeg{SO\_REUSEADDR}
 \subsubsection{L'opzione \const{SO\_REUSEADDR}}
 
 La seconda opzione da approfondire è \const{SO\_REUSEADDR}, che consente di
@@ -2637,12 +2637,11 @@ stesso indirizzo e porta solo se il programma che ha eseguito per primo
   primo programma a consentirlo, avendo usato fin dall'inizio
   \const{SO\_REUSEADDR}.}
 
-% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-
+\constend{SO\_REUSEADDR}
 
-\index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|)}
+% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
 
-\index{costante!{SO\_LINGER}@{{\tt  {SO\_LINGER}}}|(}
+\constbeg{SO\_LINGER}
 \subsubsection{L'opzione \const{SO\_LINGER}}
 
 La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome
@@ -2728,7 +2727,7 @@ secondi\footnote{questa è l'unità di misura indicata da POSIX ed adottata da
   completamento della trasmissione dei dati sul buffer.}  pari al valore
 specificato in \var{l\_linger}.
 
-\index{costante!{SO\_LINGER}@{{\tt  {SO\_LINGER}}}|)}
+\constend{SO\_LINGER}
 
 
 
@@ -3642,7 +3641,7 @@ il primo campo della struttura, \var{ifr\_name} per specificare il nome
 dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0},
 \texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle
 diversa caratteristiche e funzionalità nel secondo campo, che come si può
-notare è definito come una \direct{union} proprio in quanto il suo significato
+notare è definito come una \dirct{union} proprio in quanto il suo significato
 varia a secondo dell'operazione scelta.
 
 Si tenga inoltre presente che alcune di queste operazioni (in particolare
@@ -3844,7 +3843,7 @@ questo buffer deve essere specificata nel campo \var{ifc\_len} di
 \var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo
 indirizzo potrà essere fornito usando il campo \var{ifc\_buf}.\footnote{si
   noti che l'indirizzo del buffer è definito in \struct{ifconf} con una
-  \direct{union}, questo consente di utilizzare una delle due forme a piacere.}
+  \dirct{union}, questo consente di utilizzare una delle due forme a piacere.}
 
 La funzione restituisce nel buffer indicato una serie di strutture
 \struct{ifreq} contenenti nel campo \var{ifr\_name} il nome dell'interfaccia e
index bda4160..30412e0 100644 (file)
@@ -514,7 +514,7 @@ sez.~\ref{sec:TCP_func_bind}) su queste porte.
 
 Il membro \var{sin\_addr} contiene un indirizzo internet, e viene acceduto sia
 come struttura (un resto di una implementazione precedente in cui questa era
-una \direct{union} usata per accedere alle diverse classi di indirizzi) che
+una \dirct{union} usata per accedere alle diverse classi di indirizzi) che
 direttamente come intero. In \headfile{netinet/in.h} vengono definite anche
 alcune costanti che identificano alcuni indirizzi speciali, riportati in
 tab.~\ref{tab:TCP_ipv4_addr}, che rincontreremo più avanti.
index ca05109..ce09475 100644 (file)
@@ -679,7 +679,7 @@ modalità per effettuare lo spegnimento o il riavvio di una macchina.
 Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 (password, corrispondenze fra nomi simbolici e \ids{UID} numerici, home
 directory, ecc.)  venivano registrate all'interno dei due file di testo
-\conffile{/etc/passwd} ed \conffile{/etc/group}, il cui formato è descritto
+\conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto
 dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei
   file di configurazione (esistono comandi corrispondenti), una trattazione
   sistemistica dell'intero argomento coperto in questa sezione si consulti
@@ -689,7 +689,7 @@ file.
 
 In realtà oltre a questi due file da molto tempo gran parte dei sistemi
 unix-like usano il cosiddetto sistema delle \textit{shadow password} che
-prevede anche i due file \conffile{/etc/shadow} e \conffile{/etc/gshadow}, in
+prevede anche i due file \conffiled{/etc/shadow} e \conffiled{/etc/gshadow}, in
 cui sono state spostate le informazioni di autenticazione (ed inserite alcune
 estensioni di gestione avanzata) per toglierle dagli altri file che devono
 poter essere letti da qualunque processo per poter effettuare l'associazione
@@ -856,7 +856,6 @@ prototipi sono:
   sottostanti.}
 \end{funcproto}
 
-
 Il comportamento di tutte queste funzioni è assolutamente identico alle
 precedenti che leggono le informazioni sugli utenti, l'unica differenza è che
 in questo caso le informazioni vengono restituite in una struttura di tipo
@@ -2099,7 +2098,7 @@ operativi,\footnote{è possibile, ancorché assolutamente sconsigliabile,
 sistema viene mantenuto sempre in UTC e che la conversione all'ora locale del
 proprio fuso orario viene effettuata dalle funzioni di libreria utilizzando le
 opportune informazioni di localizzazione (specificate in
-\conffile{/etc/timezone}). In questo modo si ha l'assicurazione che l'orologio
+\conffiled{/etc/timezone}). In questo modo si ha l'assicurazione che l'orologio
 di sistema misuri sempre un tempo monotono crescente come nella realtà, anche
 in presenza di cambi di fusi orari.
 
@@ -2156,6 +2155,7 @@ sistema come vedremo seguono questa convenzione, in tal caso il numero di
 definito in \headfile{time.h} è ormai considerato obsoleto e non deve essere
 usato.
 
+\constbeg{HZ}
 In realtà tutti calcoli dei tempi vengono effettuati dal kernel per il
 cosiddetto \textit{software clock}, utilizzando il \textit{timer di sistema} e
 facendo i conti in base al numero delle interruzioni generate dello stesso, i
@@ -2174,6 +2174,8 @@ valori determinino anche la corrispondente durata dei \textit{clock tick}, ma
 in realtà questa granularità viene calcolata in maniera indipendente usando la
 costante del kernel \const{USER\_HZ}.
 
+\constend{HZ}
+
 Fino al kernel 2.6.21 la durata di un \textit{jiffy} costituiva la risoluzione
 massima ottenibile nella misura dei tempi impiegabile in una \textit{system
   call} (ad esempio per i timeout). Con il 2.6.21 e l'introduzione degli
@@ -2814,7 +2816,7 @@ chiamando direttamente la funzione \funcd{tzset}, il cui prototipo è:
 
 La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire
 dal valore della variabile di ambiente \envvar{TZ}, se quest'ultima non è
-definita verrà usato il file \conffile{/etc/localtime}. La variabile
+definita verrà usato il file \conffiled{/etc/localtime}. La variabile
 \var{tzname} contiene due stringhe, che indicano i due nomi standard della
 \itindex{timezone} \textit{timezone} corrente. La prima è il nome per l'ora
 solare, la seconda per l'ora legale. Anche se in fig.~\ref{fig:sys_tzname}
@@ -2971,7 +2973,7 @@ come un cosiddetto ``\textit{modifiable lvalue}'', cosa che consente di usare
 anche una macro, e questo è infatti il metodo usato da Linux per renderla
 locale ai singoli \itindex{thread} \textit{thread}.
 
-La variabile è in genere definita come \direct{volatile} dato che può essere
+La variabile è in genere definita come \dirct{volatile} dato che può essere
 cambiata in modo asincrono da un segnale, per un esempio si veda
 sez.~\ref{sec:sig_sigchld} ricordando quanto trattato in
 sez.~\ref{sec:proc_race_cond}). Dato che un gestore di segnale scritto bene si
index d0dea20..b07e6fd 100644 (file)
@@ -761,7 +761,7 @@ con una struttura, perché il linguaggio C non consente l'uso di una struttura
 costante come operando a destra in una assegnazione.
 
 Per questo motivo nell'header \headfile{netinet/in.h} è definita una variabile
-\macro{in6addr\_any} (dichiarata come \direct{extern}, ed inizializzata dal
+\macro{in6addr\_any} (dichiarata come \dirct{extern}, ed inizializzata dal
 sistema al valore \const{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
 assegnazione del tipo: \includecodesnip{listati/serv_addr_sin6_addr.c} in
 maniera analoga si può utilizzare la variabile \macro{in6addr\_loopback} per