Reindicizzazioni
[gapil.git] / fileio.tex
index a044eec8facbf96bed7ac9f2c90fa14ef4efd209..16a8ca824f86999010a18662f48d15c36df3c9d5 100644 (file)
@@ -12,7 +12,7 @@
 \chapter{La gestione dell'I/O su file}
 \label{cha:file_IO_interface}
 
-Esamineremo in questo capitolo le due interfacce di programmazione che
+Esamineremo in questo capitol le due interfacce di programmazione che
 consentono di gestire i dati mantenuti nei file. Cominceremo con quella nativa
 del sistema, detta dei \textit{file descriptor}, che viene fornita
 direttamente dalle \textit{system call} e che non prevede funzionalità evolute
@@ -178,12 +178,12 @@ tab.~\ref{tab:file_std_files}.
     \textbf{File} & \textbf{Significato} \\
     \hline
     \hline
-    \const{STDIN\_FILENO}  & \textit{file descriptor} dello \textit{standard
-                             input}.\\ 
-    \const{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard
-                             output}.\\
-    \const{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
-                             error}.\\
+    \constd{STDIN\_FILENO}  & \textit{file descriptor} dello \textit{standard
+                              input}.\\ 
+    \constd{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard
+                              output}.\\
+    \constd{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
+                              error}.\\
     \hline
   \end{tabular}
   \caption{Costanti definite in \headfile{unistd.h} per i file standard.}
@@ -340,9 +340,9 @@ costanti di tab.~\ref{tab:open_access_mode_flag}.
       \textbf{Flag} & \textbf{Significato} \\
       \hline
       \hline
-      \const{O\_RDONLY} & Apre il file in sola lettura.\\
-      \const{O\_WRONLY} & Apre il file in sola scrittura.\\
-      \const{O\_RDWR}   & Apre il file sia in lettura che in scrittura.\\
+      \constd{O\_RDONLY} & Apre il file in sola lettura.\\
+      \constd{O\_WRONLY} & Apre il file in sola scrittura.\\
+      \constd{O\_RDWR}   & Apre il file sia in lettura che in scrittura.\\
       \hline
     \end{tabular}
     \caption{Le tre costanti che identificano le modalità di accesso
@@ -368,11 +368,11 @@ La modalità di accesso deve sempre essere specificata quando si apre un file,
 il valore indicato in \param{flags} viene salvato nei \textit{file status
   flags}, e può essere riletto con \func{fcntl} (vedi
 sez.~\ref{sec:file_fcntl_ioctl}), il relativo valore può essere poi ottenuto
-un AND aritmetico della maschera binaria \const{O\_ACCMODE}, ma non può essere
-modificato. Nella \acr{glibc} sono definite inoltre \const{O\_READ} come
-sinonimo di \const{O\_RDONLY} e \const{O\_WRITE} come sinonimo di
+un AND aritmetico della maschera binaria \constd{O\_ACCMODE}, ma non può essere
+modificato. Nella \acr{glibc} sono definite inoltre \constd{O\_READ} come
+sinonimo di \const{O\_RDONLY} e \constd{O\_WRITE} come sinonimo di
 \const{O\_WRONLY}.\footnote{si tratta di definizioni completamente fuori
-  standard, attinenti, insieme a \const{O\_EXEC} che permetterebbe l'apertura
+  standard, attinenti, insieme a \constd{O\_EXEC} che permetterebbe l'apertura
   di un file per l'esecuzione, ad un non meglio precisato ``\textit{GNU
     system}''; pur essendo equivalenti alle definizioni classiche non è
   comunque il caso di utilizzarle.}
@@ -399,12 +399,12 @@ sez.~\ref{sec:file_fcntl_ioctl}).
       \textbf{Flag} & \textbf{Significato} \\
       \hline
       \hline
-      \const{O\_CREAT} &    Se il file non esiste verrà creato, con le regole
+      \constd{O\_CREAT} &   Se il file non esiste verrà creato, con le regole
                             di titolarità del file viste in
                             sez.~\ref{sec:file_ownership_management}. Se si
                             imposta questo flag l'argomento \param{mode} deve
                             essere sempre specificato.\\  
-      \const{O\_DIRECTORY}& Se \param{pathname} non è una directory la
+      \constd{O\_DIRECTORY}&Se \param{pathname} non è una directory la
                             chiamata fallisce. Questo flag, introdotto con il
                             kernel 2.1.126, è specifico di Linux e
                             serve ad evitare dei possibili
@@ -415,12 +415,12 @@ sez.~\ref{sec:file_fcntl_ioctl}).
                             usato al di fuori dell'implementazione di
                             \func{opendir}, ed è utilizzabile soltanto se si è
                             definita la macro \macro{\_GNU\_SOURCE}.\\
-      \const{O\_EXCL}     & Deve essere usato in congiunzione con
+      \constd{O\_EXCL}    & Deve essere usato in congiunzione con
                             \const{O\_CREAT} ed in tal caso impone che il file
                             indicato da \param{pathname} non sia già esistente
                             (altrimenti causa il fallimento della chiamata con
                             un errore di \errcode{EEXIST}).\\
-      \const{O\_LARGEFILE}& Viene usato sui sistemi a 32 bit per richiedere
+      \constd{O\_LARGEFILE}&Viene usato sui sistemi a 32 bit per richiedere
                             l'apertura di file molto grandi, la cui
                             dimensione non è rappresentabile con la versione a
                             32 bit del tipo \type{off\_t}, utilizzando
@@ -431,16 +431,16 @@ sez.~\ref{sec:file_fcntl_ioctl}).
                             delle funzioni che si attiva assegnando a $64$ la
                             macro \macro{\_FILE\_OFFSET\_BITS}, e non usare mai
                             questo flag.\\
-      \const{O\_NOCTTY}   & Se \param{pathname} si riferisce ad un dispositivo
+      \constd{O\_NOCTTY}  & Se \param{pathname} si riferisce ad un dispositivo
                             di terminale, questo non diventerà il terminale di
                             controllo, anche se il processo non ne ha ancora
                             uno (si veda sez.~\ref{sec:sess_ctrl_term}).\\ 
-      \const{O\_NOFOLLOW} & Se \param{pathname} è un collegamento simbolico
+      \constd{O\_NOFOLLOW}& Se \param{pathname} è un collegamento simbolico
                             la chiamata fallisce. Questa è un'estensione BSD
                             aggiunta in Linux a partire dal kernel
                             2.1.126, ed utilizzabile soltanto se si è definita
                             la macro \macro{\_GNU\_SOURCE}.\\ 
-      \const{O\_TRUNC}    & Se usato su un file di dati aperto in scrittura,
+      \constd{O\_TRUNC}   & Se usato su un file di dati aperto in scrittura,
                             ne tronca la lunghezza a zero; con un terminale o
                             una fifo viene ignorato, negli altri casi il
                             comportamento non è specificato.\\ 
@@ -464,8 +464,8 @@ sez.~\ref{sec:file_fcntl_ioctl}).
 
 Si è riportato in tab.~\ref{tab:open_time_flag} l'elenco dei flag delle
 \textsl{modalità di apertura}.\footnote{la \acr{glibc} definisce anche i due
-  flag \const{O\_SHLOCK}, che aprirebbe il file con uno \textit{shared lock} e
-  \const{O\_EXLOCK} che lo aprirebbe con un \textit{exclusive lock} (vedi
+  flag \constd{O\_SHLOCK}, che aprirebbe il file con uno \textit{shared lock} e
+  \constd{O\_EXLOCK} che lo aprirebbe con un \textit{exclusive lock} (vedi
   sez.~\ref{sec:file_locking}, si tratta di opzioni specifiche di BSD, che non
   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
@@ -500,7 +500,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
       \textbf{Flag} & \textbf{Significato} \\
       \hline
       \hline
-      \const{O\_APPEND}  & Il file viene aperto in \textit{append mode}. La
+      \constd{O\_APPEND} & Il file viene aperto in \textit{append mode}. La
                            posizione sul file (vedi sez.~\ref{sec:file_lseek})
                            viene sempre mantenuta sulla sua coda, per cui
                            quanto si scrive viene sempre aggiunto al contenuto
@@ -509,7 +509,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            verificarsi \textit{race condition} con una
                            sovrapposizione dei dati se più di un processo
                            scrive allo stesso tempo.\\ 
-      \const{O\_ASYNC}   & Apre il file per l'I/O in modalità asincrona (vedi
+      \constd{O\_ASYNC}  & Apre il file per l'I/O in modalità asincrona (vedi
                            sez.~\ref{sec:signal_driven_io}). Quando è
                            impostato viene generato il segnale \signal{SIGIO}
                            tutte le volte che il file è pronto per le
@@ -520,22 +520,22 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            in fase di apertura del file, deve
                            invece essere attivato successivamente con
                            \func{fcntl}.\\
-      \const{O\_CLOEXEC}&  Attiva la modalità di \textit{close-on-exec} (vedi
-                          sez.~\ref{sec:proc_exec}) sul file. Il flag è 
-                          previsto dallo standard POSIX.1-2008, ed è stato
-                          introdotto con il kernel 2.6.23 per evitare una
-                          \textit{race condition} che si potrebbe verificare
-                          con i \textit{thread} fra l'apertura del file e
-                          l'impostazione della suddetta modalità con
-                          \func{fcntl} (vedi
-                          sez.~\ref{sec:file_fcntl_ioctl}).\\ 
-      \const{O\_DIRECT}  & Esegue l'I/O direttamente dalla memoria in
+      \constd{O\_CLOEXEC}& Attiva la modalità di \textit{close-on-exec} (vedi
+                           sez.~\ref{sec:proc_exec}) sul file. Il flag è 
+                           previsto dallo standard POSIX.1-2008, ed è stato
+                           introdotto con il kernel 2.6.23 per evitare una
+                           \textit{race condition} che si potrebbe verificare
+                           con i \textit{thread} fra l'apertura del file e
+                           l'impostazione della suddetta modalità con
+                           \func{fcntl} (vedi
+                           sez.~\ref{sec:file_fcntl_ioctl}).\\ 
+      \constd{O\_DIRECT} & Esegue l'I/O direttamente dalla memoria in
                            \textit{user space} in maniera sincrona, in modo da
                            scavalcare i meccanismi di bufferizzazione del
                            kernel. Introdotto con il kernel 2.4.10 ed
                            utilizzabile soltanto se si è definita la 
                            macro \macro{\_GNU\_SOURCE}.\\ 
-      \const{O\_NOATIME} & Blocca l'aggiornamento dei tempi di accesso dei
+      \constd{O\_NOATIME}& Blocca l'aggiornamento dei tempi di accesso dei
                            file (vedi sez.~\ref{sec:file_file_times}). Per
                            molti filesystem questa funzionalità non è
                            disponibile per il singolo file ma come opzione
@@ -543,7 +543,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            montaggio. Introdotto con il kernel 2.6.8 ed 
                            utilizzabile soltanto se si è definita la 
                            macro \macro{\_GNU\_SOURCE}.\\ 
-      \const{O\_NONBLOCK}& Apre il file in \textsl{modalità non bloccante} per
+      \constd{O\_NONBLOCK}&Apre il file in \textsl{modalità non bloccante} per
                            le operazioni di I/O (vedi
                            sez.~\ref{sec:file_noblocking}). Questo significa
                            il fallimento delle successive operazioni di
@@ -556,19 +556,19 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            si vuole aprire un file di dispositivo per eseguire
                            una \func{ioctl} (vedi
                            sez.~\ref{sec:file_fcntl_ioctl}).\\ 
-      \const{O\_NDELAY}  & In Linux è un sinonimo di \const{O\_NONBLOCK}, ma
+      \constd{O\_NDELAY} & In Linux è un sinonimo di \const{O\_NONBLOCK}, ma
                            origina da SVr4, dove però causava il ritorno da
                            una \func{read} con un valore nullo e non con un
                            errore, questo introduce un'ambiguità, dato che
                            come vedremo in sez.~\ref{sec:file_read} il ritorno
                            di un valore nullo da parte di \func{read} ha 
                            il significato di una \textit{end-of-file}.\\
-      \const{O\_SYNC}    & Apre il file per l'input/output sincrono. Ogni
+      \constd{O\_SYNC}   & Apre il file per l'input/output sincrono. Ogni
                            scrittura si bloccherà fino alla conferma
                            dell'arrivo di tutti i dati e di tutti i metadati
                            sull'hardware sottostante (in questo significato
                            solo dal kernel 2.6.33).\\
-      \const{O\_DSYNC}   & Apre il file per l'input/output sincrono. Ogni
+      \constd{O\_DSYNC}  & Apre il file per l'input/output sincrono. Ogni
                            scrittura di dati si bloccherà fino alla conferma
                            dell'arrivo degli stessi e della parte di metadati
                            ad essi relativa sull'hardware sottostante (in
@@ -594,7 +594,7 @@ conseguente effetto sulle caratteristiche operative che controllano (torneremo
 sull'argomento in sez.~\ref{sec:file_fcntl_ioctl}).
 
 Il flag \const{O\_ASYNC} (che, per per compatibilità con BSD, si può indicare
-anche con la costante \const{FASYNC}) è definito come possibile valore per
+anche con la costante \constd{FASYNC}) è definito come possibile valore per
 \func{open}, ma per un bug dell'implementazione,\footnote{segnalato come
   ancora presente nella pagina di manuale almeno fino al Settembre 2011.} non
 solo non attiva il comportamento citato, ma se usato richiede di essere
@@ -780,8 +780,8 @@ da \param{offset}, che viene sommato al riferimento dato
 dall'argomento \param{whence}, che deve essere indicato con una delle costanti
 riportate in tab.~\ref{tab:lseek_whence_values}.\footnote{per compatibilità
   con alcune vecchie notazioni questi valori possono essere rimpiazzati
-  rispettivamente con 0, 1 e 2 o con \const{L\_SET}, \const{L\_INCR} e
-  \const{L\_XTND}.} Si tenga presente che la chiamata a \func{lseek} non causa
+  rispettivamente con 0, 1 e 2 o con \constd{L\_SET}, \constd{L\_INCR} e
+  \constd{L\_XTND}.} Si tenga presente che la chiamata a \func{lseek} non causa
 nessun accesso al file, si limita a modificare la posizione corrente (cioè il
 campo \var{f\_pos} della struttura \kstruct{file}, vedi
 fig.~\ref{fig:file_proc_file}).  Dato che la funzione ritorna la nuova
@@ -796,23 +796,23 @@ posizione corrente nel file con \code{lseek(fd, 0, SEEK\_CUR)}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{SEEK\_SET} & Si fa riferimento all'inizio del file: il valore, che 
+    \constd{SEEK\_SET}& Si fa riferimento all'inizio del file: il valore, che 
                         deve essere positivo, di \param{offset} indica
                         direttamente la nuova posizione corrente.\\
-    \const{SEEK\_CUR} & Si fa riferimento alla posizione corrente del file:
+    \constd{SEEK\_CUR}& Si fa riferimento alla posizione corrente del file:
                         ad essa viene sommato \param{offset}, che può essere
                         negativo e positivo, per ottenere la nuova posizione
                         corrente.\\
-    \const{SEEK\_END} & Si fa riferimento alla fine del file: alle dimensioni
+    \constd{SEEK\_END}& Si fa riferimento alla fine del file: alle dimensioni
                         del file viene sommato \param{offset}, che può essere
                         negativo e positivo, per ottenere la nuova posizione
                         corrente.\\
     \hline
-    \const{SEEK\_DATA}& Sposta la posizione nel file sull'inizio del primo
+    \constd{SEEK\_DATA}&Sposta la posizione nel file sull'inizio del primo
                         blocco di dati dopo un \textit{hole} che segue (o
                         coincide) con la posizione indicata da \param{offset}
                         (dal kernel 3.1).\\
-    \const{SEEK\_HOLE}& Sposta la posizione sul file all'inizio del primo
+    \constd{SEEK\_HOLE}&Sposta la posizione sul file all'inizio del primo
                         \textit{hole} nel file che segue o inizia
                         con \param{offset}, oppure si porta su \param{offset} 
                         se questo è all'interno di un \textit{hole}, oppure si
@@ -1215,7 +1215,7 @@ mantenuti nella struttura \kstruct{file} della \textit{file table}, vengono
 condivisi, per cui una modifica degli stessi con \func{fcntl} (vedi
 sez.~\ref{sec:file_fcntl_ioctl}) si applicherebbe a tutti processi che
 condividono la voce nella \textit{file table}. Ai file però sono associati
-anche altri flag, dei quali l'unico usato al momento è \const{FD\_CLOEXEC},
+anche altri flag, dei quali l'unico usato al momento è \constd{FD\_CLOEXEC},
 detti \itindex{file~descriptor~flags} \textit{file descriptor flags}; questi
 invece sono mantenuti in \kstruct{file\_struct}, e perciò sono locali per
 ciascun processo e non vengono modificati dalle azioni degli altri anche in
@@ -1638,7 +1638,7 @@ corrispettive classiche, con la sola eccezione del fatto che se fra i loro
 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
+se per \param{dirfd} si usa il valore speciale \constd{AT\_FDCWD}, la
 risoluzione sarà effettuata rispetto alla directory di lavoro corrente del
 processo. Si tenga presente però che questa, come le altre costanti
 \texttt{AT\_*}, è definita in \headfile{fcntl.h}, pertanto se la si vuole
@@ -1837,18 +1837,20 @@ costanti utilizzabili per i valori di \param{flags}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{AT\_SYMLINK\_NOFOLLOW}& Se impostato la funzione non esegue la
-                                 dereferenziazione dei collegamenti simbolici.\\
-    \const{AT\_SYMLINK\_FOLLOW}& Se impostato la funzione esegue la
-                                 dereferenziazione dei collegamenti simbolici
-                                 (usato esplicitamente solo da \func{linkat}).\\
-    \const{AT\_EACCES}         & Usato solo da \func{faccessat}, richiede che
-                                 il controllo dei permessi sia fatto usando
-                                 l'\ids{UID} effettivo invece di quello
-                                 reale.\\
-    \const{AT\_REMOVEDIR}      & Usato solo da \func{unlinkat}, richiede che
-                                 la funzione si comporti come \func{rmdir}
-                                 invece che come \func{unlink}.\\
+    \constd{AT\_SYMLINK\_NOFOLLOW}& Se impostato la funzione non esegue la
+                                    dereferenziazione dei collegamenti
+                                    simbolici.\\ 
+    \constd{AT\_SYMLINK\_FOLLOW}& Se impostato la funzione esegue la
+                                  dereferenziazione dei collegamenti simbolici
+                                  (usato esplicitamente solo da
+                                  \func{linkat}).\\ 
+    \constd{AT\_EACCES}         & Usato solo da \func{faccessat}, richiede che
+                                  il controllo dei permessi sia fatto usando
+                                  l'\ids{UID} effettivo invece di quello
+                                  reale.\\
+    \constd{AT\_REMOVEDIR}      & Usato solo da \func{unlinkat}, richiede che
+                                  la funzione si comporti come \func{rmdir}
+                                  invece che come \func{unlink}.\\
     \hline
   \end{tabular}  
   \caption{Le costanti utilizzate per i bit dell'argomento
@@ -1927,7 +1929,7 @@ possibili valori per \var{cmd}, e del relativo significato, dei codici di
 errore restituiti e del tipo del terzo argomento (cui faremo riferimento con
 il nome indicato nel precedente prototipo), è riportata di seguito:
 \begin{basedescript}{\desclabelwidth{1.8cm}}
-\item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore
+\item[\constd{F\_DUPFD}] trova il primo file descriptor disponibile di valore
   maggiore o uguale ad \param{arg}, e ne fa un duplicato
   di \param{fd}, ritorna il nuovo file descriptor in caso di successo e $-1$
   in caso di errore. Oltre a \errval{EBADF} gli errori possibili sono
@@ -1937,7 +1939,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
 
 \itindbeg{close-on-exec}
 
-\item[\const{F\_DUPFD\_CLOEXEC}] ha lo stesso effetto di \const{F\_DUPFD}, ma
+\item[\constd{F\_DUPFD\_CLOEXEC}] ha lo stesso effetto di \const{F\_DUPFD}, ma
   in più attiva il flag di \textit{close-on-exec} sul file descriptor
   duplicato, in modo da evitare una successiva chiamata con
   \const{F\_SETFD}. La funzionalità è stata introdotta con il kernel 2.6.24 ed
@@ -1945,7 +1947,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   \macro{\_POSIX\_C\_SOURCE} ad un valore adeguato secondo quanto visto in
   sez.~\ref{sec:intro_gcc_glibc_std}).
 
-\item[\const{F\_GETFD}] restituisce il valore dei \textit{file descriptor
+\item[\constd{F\_GETFD}] restituisce il valore dei \textit{file descriptor
     flags} di \param{fd} in caso di successo o $-1$ in caso di errore, il
   terzo argomento viene ignorato. Non sono previsti errori diversi da
   \errval{EBADF}. Al momento l'unico flag usato è quello di
@@ -1954,7 +1956,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   \func{exec} (vedi sez.~\ref{sec:proc_exec}). Un valore nullo significa
   pertanto che il flag non è impostato.
 
-\item[\const{F\_SETFD}] imposta il valore dei \textit{file descriptor flags}
+\item[\constd{F\_SETFD}] imposta il valore dei \textit{file descriptor flags}
   al valore specificato con \param{arg}, ritorna un valore nullo in caso di
   successo e $-1$ in caso di errore. Non sono previsti errori diversi da
   \errval{EBADF}. Dato che l'unico flag attualmente usato è quello di
@@ -1965,7 +1967,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
     \texttt{fs/fcntl.c} dei sorgenti del kernel.}
 \itindend{close-on-exec}
 
-\item[\const{F\_GETFL}] ritorna il valore dei \textit{file status flags} di
+\item[\constd{F\_GETFL}] ritorna il valore dei \textit{file status flags} di
   \param{fd} in caso di successo o $-1$ in caso di errore, il terzo argomento
   viene ignorato. Non sono previsti errori diversi da \errval{EBADF}. Il
   comando permette di rileggere il valore di quei bit
@@ -1978,7 +1980,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
     flag} con la maschera \const{O\_ACCMODE} come già accennato in
   sez.~\ref{sec:file_open_close}. 
 
-\item[\const{F\_SETFL}] imposta il valore dei \textit{file status flags} al
+\item[\constd{F\_SETFL}] imposta il valore dei \textit{file status flags} al
   valore specificato da \param{arg}, ritorna un valore nullo in caso di
   successo o $-1$ in caso di errore. In generale possono essere impostati solo
   i flag riportati in tab.~\ref{tab:open_operation_flag}, su Linux si possono
@@ -1990,26 +1992,26 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   permessi di amministratore) ed \errcode{EINVAL} se si cerca di impostare
   \const{O\_DIRECT} su un file che non supporta questo tipo di operazioni.
 
-\item[\const{F\_GETLK}] richiede un controllo sul file lock specificato da
+\item[\constd{F\_GETLK}] richiede un controllo sul file lock specificato da
   \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato,
   ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Come
   per i due successivi comandi oltre a \errval{EBADF} se \param{lock} non è un
   puntatore valido restituisce l'errore generico \errcode{EFAULT}. Questa
   funzionalità è trattata in dettaglio in sez.~\ref{sec:file_posix_lock}.
 
-\item[\const{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
+\item[\constd{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
   specificato nella struttura puntata da \param{lock}, ritorna un valore nullo
   in caso di successo e $-1$ se il file lock è tenuto da qualcun altro, nel
   qual caso si ha un errore di \errcode{EACCES} o \errcode{EAGAIN}.  Questa
   funzionalità è trattata in dettaglio in sez.~\ref{sec:file_posix_lock}.
 
-\item[\const{F\_SETLKW}] identica a \const{F\_SETLK} eccetto per il fatto che
+\item[\constd{F\_SETLKW}] identica a \const{F\_SETLK} eccetto per il fatto che
   la funzione non ritorna subito ma attende che il blocco sia rilasciato, se
   l'attesa viene interrotta da un segnale la funzione restituisce $-1$ e
   imposta \var{errno} a \errcode{EINTR}.  Questa funzionalità è trattata in
   dettaglio in sez.~\ref{sec:file_posix_lock}.
 
-\item[\const{F\_GETOWN}] restituisce in caso di successo l'identificatore del
+\item[\constd{F\_GETOWN}] restituisce in caso di successo l'identificatore del
   processo o del \textit{process group} (vedi sez.~\ref{sec:sess_proc_group})
   che è preposto alla ricezione del segnale \signal{SIGIO} (o l'eventuale
   segnale alternativo impostato con \const{F\_SETSIG}) per gli eventi
@@ -2045,7 +2047,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   il comportamento del comando può risultare diverso a seconda delle versioni
   della \acr{glibc} e del kernel.
 
-\item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg},
+\item[\constd{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg},
   l'identificatore del processo o del \textit{process group} che riceverà i
   segnali \signal{SIGIO} e \signal{SIGURG} per gli eventi associati al file
   descriptor \param{fd}. Ritorna un valore nullo in caso di successo o $-1$ in
@@ -2076,7 +2078,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   interpretato come l'identificatore di un processo o di un \textit{process
     group}.
 
-\item[\const{F\_GETOWN\_EX}] legge nella struttura puntata
+\item[\constd{F\_GETOWN\_EX}] legge nella struttura puntata
   dall'argomento \param{owner} l'identificatore del processo, \textit{thread}
   o \textit{process group} (vedi sez.~\ref{sec:sess_proc_group}) che è
   preposto alla ricezione dei segnali \signal{SIGIO} e \signal{SIGURG} per gli
@@ -2093,7 +2095,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   di \const{F\_GETOWN}.  Il comando è specifico di Linux ed utilizzabile solo
   se si è definita la macro \macro{\_GNU\_SOURCE}.
 
-\item[\const{F\_SETOWN\_EX}] imposta con il valore della struttura
+\item[\constd{F\_SETOWN\_EX}] imposta con il valore della struttura
   \struct{f\_owner\_ex} puntata \param{owner}, l'identificatore del processo o
   del \textit{process group} che riceverà i segnali \signal{SIGIO} e
   \signal{SIGURG} per gli eventi associati al file
@@ -2117,17 +2119,17 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   riportata in fig.~\ref{fig:f_owner_ex}, in cui il primo campo indica il tipo
   di identificatore il cui valore è specificato nel secondo campo, che assume
   lo stesso significato di \param{arg} per \const{F\_SETOWN}. Per il campo
-  \var{type} i soli valori validi sono \const{F\_OWNER\_TID},
-  \const{F\_OWNER\_PID} e \const{F\_OWNER\_PGRP}, che indicano rispettivamente
-  che si intende specificare con \var{pid} un \textit{Tread ID}, un
-  \textit{Process ID} o un \textit{Process Group ID}. A differenza di
-  \const{F\_SETOWN} se si specifica un \textit{Tread ID} questo riceverà sia
-  \signal{SIGIO} (o il segnale impostato con \const{F\_SETSIG}) che
+  \var{type} i soli valori validi sono \constd{F\_OWNER\_TID},
+  \constd{F\_OWNER\_PID} e \constd{F\_OWNER\_PGRP}, che indicano
+  rispettivamente che si intende specificare con \var{pid} un \textit{Tread
+    ID}, un \textit{Process ID} o un \textit{Process Group ID}. A differenza
+  di \const{F\_SETOWN} se si specifica un \textit{Tread ID} questo riceverà
+  sia \signal{SIGIO} (o il segnale impostato con \const{F\_SETSIG}) che
   \signal{SIGURG}. Il comando è specifico di Linux, è disponibile solo a
   partire dal kernel 2.6.32, ed è utilizzabile solo se si è definita la macro
   \macro{\_GNU\_SOURCE}.
 
-\item[\const{F\_GETSIG}] restituisce il valore del segnale inviato dai vari
+\item[\constd{F\_GETSIG}] restituisce il valore del segnale inviato dai vari
   meccanismi di I/O asincrono associati al file descriptor \param{fd} (quelli
   trattati in sez.~\ref{sec:file_asyncronous_operation}) in caso di successo o
   $-1$ in caso di errore, il terzo argomento viene ignorato. Non sono previsti
@@ -2137,8 +2139,8 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   essere anche lo stesso \signal{SIGIO}. Il comando è specifico di Linux ed
   utilizzabile solo se si è definita la macro \macro{\_GNU\_SOURCE}.
 
-\item[\const{F\_SETSIG}] imposta il segnale inviato dai vari meccanismi di I/O
-  asincrono associati al file descriptor \param{fd} (quelli trattati in
+\item[\constd{F\_SETSIG}] imposta il segnale inviato dai vari meccanismi di
+  I/O asincrono associati al file descriptor \param{fd} (quelli trattati in
   sez.~\ref{sec:file_asyncronous_operation}) al valore indicato
   da \param{arg}, ritorna un valore nullo in caso di successo o $-1$ in caso
   di errore.  Oltre a \errval{EBADF} gli errori possibili sono
@@ -2158,14 +2160,14 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   sez.~\ref{sec:sig_real_time}), ed in particolare la capacità di essere
   accumulati in una coda prima della notifica.
 
-\item[\const{F\_GETLEASE}] restituisce il tipo di \textit{file lease} che il
+\item[\constd{F\_GETLEASE}] restituisce il tipo di \textit{file lease} che il
   processo detiene nei confronti del file descriptor \var{fd} o $-1$ in caso
   di errore, il terzo argomento viene ignorato. Non sono previsti errori
   diversi da \errval{EBADF}.  Il comando è specifico di Linux ed utilizzabile
   solo se si è definita la macro \macro{\_GNU\_SOURCE}.  Questa funzionalità è
   trattata in dettaglio in sez.~\ref{sec:file_asyncronous_lease}.
 
-\item[\const{F\_SETLEASE}] imposta o rimuove a seconda del valore
+\item[\constd{F\_SETLEASE}] imposta o rimuove a seconda del valore
   di \param{arg} un \textit{file lease} sul file descriptor \var{fd} a seconda
   del valore indicato da \param{arg}. Ritorna un valore nullo in caso di
   successo o $-1$ in caso di errore. Oltre a \errval{EBADF} si otterrà
@@ -2184,7 +2186,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   definita la macro \macro{\_GNU\_SOURCE}. Questa funzionalità è trattata in
   dettaglio in sez.~\ref{sec:file_asyncronous_lease}.
 
-\item[\const{F\_NOTIFY}] attiva il meccanismo di notifica asincrona per cui
+\item[\constd{F\_NOTIFY}] attiva il meccanismo di notifica asincrona per cui
   viene riportato al processo chiamante, tramite il segnale \signal{SIGIO} (o
   altro segnale specificato con \const{F\_SETSIG}) ogni modifica eseguita o
   direttamente sulla directory cui \var{fd} fa riferimento, o su uno dei file
@@ -2194,7 +2196,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   dai kernel della serie 2.4.x, è trattata in dettaglio in
   sez.~\ref{sec:file_asyncronous_lease}.
 
-\item[\const{F\_GETPIPE\_SZ}] restituisce in caso di successo la dimensione
+\item[\constd{F\_GETPIPE\_SZ}] restituisce in caso di successo la dimensione
   del buffer associato alla \textit{pipe} \param{fd} (vedi
   sez.~\ref{sec:ipc_pipes}) o $-1$ in caso di errore, il terzo argomento viene
   ignorato. Non sono previsti errori diversi da \errval{EBADF}, che viene
@@ -2202,7 +2204,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   specifico di Linux, è disponibile solo a partire dal kernel 2.6.35, ed è
   utilizzabile solo se si è definita la macro \macro{\_GNU\_SOURCE}.
 
-\item[\const{F\_SETPIPE\_SZ}] imposta la dimensione del buffer associato alla
+\item[\constd{F\_SETPIPE\_SZ}] imposta la dimensione del buffer associato alla
   \textit{pipe} \param{fd} (vedi sez.~\ref{sec:ipc_unix}) ad un valore uguale
   o superiore a quello indicato dall'argomento \param{arg}. Ritorna un valore
   nullo in caso di successo o $-1$ in caso di errore. Oltre a \errval{EBADF}
@@ -2342,36 +2344,36 @@ sono definite nel kernel a livello generale, e vengono sempre interpretate per
 prime, per cui, come illustrato in \cite{LinDevDri}, eventuali operazioni
 specifiche che usino lo stesso valore verrebbero ignorate:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{FIOCLEX}] imposta il flag di \textit{close-on-exec} sul file, in
+\item[\constd{FIOCLEX}] imposta il flag di \textit{close-on-exec} sul file, in
   questo caso, essendo usata come operazione logica, \func{ioctl} non richiede
   un terzo argomento, il cui eventuale valore viene ignorato.
-\item[\const{FIONCLEX}] cancella il flag di \textit{close-on-exec} sul file,
+\item[\constd{FIONCLEX}] cancella il flag di \textit{close-on-exec} sul file,
   in questo caso, essendo usata come operazione logica, \func{ioctl} non
   richiede un terzo argomento, il cui eventuale valore viene ignorato.
-\item[\const{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul
+\item[\constd{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul
   file (vedi sez.~\ref{sec:signal_driven_io}); il terzo argomento
   deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *})
   che contiene un valore logico (un valore nullo disabilita, un valore non
   nullo abilita).
-\item[\const{FIONBIO}] abilita o disabilita sul file l'I/O in modalità non
+\item[\constd{FIONBIO}] abilita o disabilita sul file l'I/O in modalità non
   bloccante; il terzo argomento deve essere un puntatore ad un intero (cioè di
   tipo \texttt{const int *}) che contiene un valore logico (un valore nullo
   disabilita, un valore non nullo abilita).
-\item[\const{FIOSETOWN}] imposta il processo che riceverà i segnali
+\item[\constd{FIOSETOWN}] imposta il processo che riceverà i segnali
   \signal{SIGURG} e \signal{SIGIO} generati sul file; il terzo argomento deve
   essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) il cui
   valore specifica il PID del processo.
-\item[\const{FIOGETOWN}] legge il processo che riceverà i segnali
+\item[\constd{FIOGETOWN}] legge il processo che riceverà i segnali
   \signal{SIGURG} e \signal{SIGIO} generati sul file; il terzo argomento deve
   essere un puntatore ad un intero (cioè di tipo \texttt{int *}) su cui sarà
   scritto il PID del processo.
-\item[\const{FIONREAD}] legge il numero di byte disponibili in lettura sul
+\item[\constd{FIONREAD}] legge il numero di byte disponibili in lettura sul
   file descriptor; questa operazione è disponibile solo su alcuni file
   descriptor, in particolare sui socket (vedi sez.~\ref{sec:sock_ioctl_IP}) o
   sui file descriptor di \textit{epoll} (vedi sez.~\ref{sec:file_epoll}), il
   terzo argomento deve essere un puntatore ad un intero (cioè di tipo
   \texttt{int *}) su cui sarà restituito il valore.
-\item[\const{FIOQSIZE}] restituisce la dimensione corrente di un file o di una
+\item[\constd{FIOQSIZE}] restituisce la dimensione corrente di un file o di una
   directory, mentre se applicata ad un dispositivo fallisce con un errore di
   \errcode{ENOTTY}; il terzo argomento deve essere un puntatore ad un intero
   (cioè di tipo \texttt{int *}) su cui sarà restituito il valore.
@@ -3270,14 +3272,16 @@ che vedremo in sez.~\ref{sec:file_formatted_io} come
 ``\verb|\n|'' con uno zero, mentre \func{fgets} aggiunge uno zero dopo il
 \textit{newline}, che resta dentro la stringa.
 
+\itindbeg{buffer~overflow}
+
 Se la lettura incontra la fine del file (o c'è un errore) viene restituito un
 puntatore \val{NULL}, ed il buffer \param{buf} non viene toccato.  L'uso di
 \func{gets} è deprecato e deve essere assolutamente evitato, la funzione
 infatti non controlla il numero di byte letti, per cui nel caso la stringa
-letta superi le dimensioni del buffer, si avrà un \itindex{buffer~overflow}
-\textit{buffer overflow}, con sovrascrittura della memoria del processo
-adiacente al buffer.\footnote{questa tecnica è spiegata in dettaglio e con
-  molta efficacia nell'ormai famoso articolo di Aleph1 \cite{StS}.}
+letta superi le dimensioni del buffer, si avrà un \textit{buffer overflow},
+con sovrascrittura della memoria del processo adiacente al
+buffer.\footnote{questa tecnica è spiegata in dettaglio e con molta efficacia
+  nell'ormai famoso articolo di Aleph1 \cite{StS}.}
 
 Questa è una delle vulnerabilità più sfruttate per guadagnare accessi non
 autorizzati al sistema (i cosiddetti \textit{exploit}), basta infatti inviare
@@ -3288,6 +3292,8 @@ l'esecuzione nel codice inviato nella stringa stessa, che in genere contiene
 uno \textit{shell code}, cioè una sezione di programma che lancia una shell da
 cui si potranno poi eseguire altri programmi.
 
+\itindend{buffer~overflow}
+
 La funzione \func{fgets} non ha i precedenti problemi di \func{gets} in quanto
 prende in ingresso la dimensione del buffer \param{size}, che non verrà mai
 ecceduta in lettura. La funzione legge fino ad un massimo di \param{size}
@@ -3922,9 +3928,9 @@ in \param{buf} e la dimensione in \param{size}.
       \textbf{Valore} & \textbf{Modalità} \\
       \hline
       \hline
-      \const{\_IONBF} & \textit{unbuffered}\\
-      \const{\_IOLBF} & \textit{line buffered}\\
-      \const{\_IOFBF} & \textit{fully buffered}\\
+      \constd{\_IONBF} & \textit{unbuffered}\\
+      \constd{\_IOLBF} & \textit{line buffered}\\
+      \constd{\_IOFBF} & \textit{fully buffered}\\
       \hline
     \end{tabular}
     \caption{Valori dell'argomento \param{mode} di \func{setvbuf} 
@@ -3937,7 +3943,7 @@ stato allocato e rimanere disponibile per tutto il tempo in cui si opera sullo
 \textit{stream}. In genere conviene allocarlo con \func{malloc} e disallocarlo
 dopo la chiusura del file; ma fintanto che il file è usato all'interno di una
 funzione, può anche essere usata una variabile automatica. In
-\headfile{stdio.h} è definita la macro \const{BUFSIZ}, che indica le
+\headfile{stdio.h} è definita la costante \constd{BUFSIZ}, che indica le
 dimensioni generiche del buffer di uno \textit{stream}, queste vengono usate
 dalla funzione \func{setbuf}.  Non è detto però che tale dimensione
 corrisponda sempre al valore ottimale (che può variare a seconda del
@@ -4169,14 +4175,14 @@ assumere uno dei valori indicati in tab.~\ref{tab:file_fsetlocking_type}.
       \textbf{Valore} & \textbf{Significato} \\
       \hline
       \hline
-      \const{FSETLOCKING\_INTERNAL}& Lo \textit{stream} userà da ora in poi il
-                                     blocco implicito predefinito.\\
-      \const{FSETLOCKING\_BYCALLER}& Al ritorno della funzione sarà l'utente a
-                                     dover gestire da solo il locking dello
-                                     \textit{stream}.\\
-      \const{FSETLOCKING\_QUERY}   & Restituisce lo stato corrente della
-                                     modalità di blocco dello
-                                     \textit{stream}.\\
+      \constd{FSETLOCKING\_INTERNAL}& Lo \textit{stream} userà da ora in poi il
+                                      blocco implicito predefinito.\\
+      \constd{FSETLOCKING\_BYCALLER}& Al ritorno della funzione sarà l'utente a
+                                      dover gestire da solo il locking dello
+                                      \textit{stream}.\\
+      \constd{FSETLOCKING\_QUERY}   & Restituisce lo stato corrente della
+                                      modalità di blocco dello
+                                      \textit{stream}.\\
       \hline
     \end{tabular}
     \caption{Valori dell'argomento \param{type} di \func{\_\_fsetlocking}