Reindicizzazioni
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 26 Oct 2015 23:54:54 +0000 (23:54 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 26 Oct 2015 23:54:54 +0000 (23:54 +0000)
fileadv.tex
filedir.tex
fileio.tex
ipc.tex
macro.tex
signal.tex
sockctrl.tex
system.tex

index 9737bb0d33c973f73dfa93f3acf5b40eb22753b1..8669945f3689ffa413696acfeaac1a4b2637c02f 100644 (file)
@@ -2720,7 +2720,7 @@ avvenga è di impostare la lunghezza della coda dei segnali \textit{real-time}
 ad una dimensione identica al valore massimo del numero di file descriptor
 utilizzabili, vale a dire impostare il contenuto di
 \sysctlfile{kernel/rtsig-max} allo stesso valore del contenuto di
-\sysctlfile{fs/file-max}.
+\sysctlfilem{fs/file-max}.
 
 % TODO fare esempio che usa O_ASYNC
 
index cac5bc4601c923bec9f05ae8a0981ccfbedc631c..5bf70964b66b52774db287d41342556f87f8edc9 100644 (file)
@@ -1248,17 +1248,19 @@ 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 \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}, \funcm{hasmntopt}.} che
-convenzionalmente sono usati in quasi tutti i sistemi unix-like per mantenere
-rispettivamente le informazioni riguardo ai filesystem da montare e a quelli
-correntemente montati. Le funzioni servono a leggere il contenuto di questi
-file in opportune strutture \structd{fstab} e \structd{mntent}, e, nel caso di
-\conffile{/etc/mtab}, per inserire e rimuovere le voci presenti nel file.
+\conffilebeg{/etc/mtab} 
+
+La \acr{glibc} provvede infine una serie di funzioni per la gestione dei due
+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},
+  \funcm{hasmntopt}.} che convenzionalmente sono usati in quasi tutti i
+sistemi unix-like per mantenere rispettivamente le informazioni riguardo ai
+filesystem da montare e a quelli correntemente montati. Le funzioni servono a
+leggere il contenuto di questi file in opportune strutture \structd{fstab} e
+\structd{mntent}, e, nel caso di \conffile{/etc/mtab}, per inserire e
+rimuovere le voci presenti nel file.
 
 In generale si dovrebbero usare queste funzioni, in particolare quelle
 relative a \conffile{/etc/mtab}, quando si debba scrivere un programma che
@@ -1275,6 +1277,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)
@@ -6531,7 +6534,7 @@ tutti, compreso l'amministratore.\footnote{la qual cosa, visto il default
 Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set}
 è diventato una proprietà di ciascun processo, che viene propagata invariata
 sia attraverso una \func{fork} che una \func{exec}. In questo caso il file
-\sysctlfile{kernel/cap-bound} non esiste e \texttt{init} non ha nessun
+\sysctlfilem{kernel/cap-bound} non esiste e \texttt{init} non ha nessun
 ruolo speciale, inoltre in questo caso all'avvio il valore iniziale prevede la
 presenza di tutte le capacità (compresa \const{CAP\_SETPCAP}). 
 
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} 
diff --git a/ipc.tex b/ipc.tex
index 01c4c5b825fcc97a8b97e28e7685ea2a6885ab1b..9b7ac1a21a90ed2c395f4542f728556604db5f25 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -505,12 +505,12 @@ essere in una relazione di \textsl{parentela}.
 
 Utilizzando una \textit{fifo} tutti i dati passeranno, come per le
 \textit{pipe}, attraverso un buffer nel kernel, senza transitare dal
-filesystem. Il fatto che siano associate ad un \itindex{inode}
-\textit{inode} presente sul filesystem serve infatti solo a fornire un punto
-di accesso per i processi, che permetta a questi ultimi di accedere alla
-stessa \textit{fifo} senza avere nessuna relazione, con una semplice
-\func{open}. Il comportamento delle funzioni di lettura e scrittura è identico
-a quello illustrato per le \textit{pipe} in sez.~\ref{sec:ipc_pipes}.
+filesystem. Il fatto che siano associate ad un \textit{inode} presente sul
+filesystem serve infatti solo a fornire un punto di accesso per i processi,
+che permetta a questi ultimi di accedere alla stessa \textit{fifo} senza avere
+nessuna relazione, con una semplice \func{open}. Il comportamento delle
+funzioni di lettura e scrittura è identico a quello illustrato per le
+\textit{pipe} in sez.~\ref{sec:ipc_pipes}.
 
 Abbiamo già trattato in sez.~\ref{sec:file_mknod} le funzioni \func{mknod} e
 \func{mkfifo} che permettono di creare una \textit{fifo}. Per utilizzarne una
@@ -994,12 +994,12 @@ meno significativi.
 
 Il problema è che anche così non c'è la sicurezza che il valore della chiave
 sia univoco, infatti esso è costruito combinando il byte di \param{proj\_id)}
-con i 16 bit meno significativi \itindex{inode} dell'inode del file
-\param{pathname} (che vengono ottenuti attraverso \func{stat}, da cui derivano
-i possibili errori), e gli 8 bit meno significativi del numero del dispositivo
-su cui è il file.  Diventa perciò relativamente facile ottenere delle
-collisioni, specie se i file sono su dispositivi con lo stesso \textit{minor
-  number}, come \file{/dev/hda1} e \file{/dev/sda1}.
+con i 16 bit meno significativi dell'inode del file \param{pathname} (che
+vengono ottenuti attraverso \func{stat}, da cui derivano i possibili errori),
+e gli 8 bit meno significativi del numero del dispositivo su cui è il file.
+Diventa perciò relativamente facile ottenere delle collisioni, specie se i
+file sono su dispositivi con lo stesso \textit{minor number}, come
+\file{/dev/hda1} e \file{/dev/sda1}.
 
 In genere quello che si fa è utilizzare un file comune usato dai programmi che
 devono comunicare (ad esempio un header comune, o uno dei programmi che devono
@@ -1315,21 +1315,21 @@ l'uso di \func{sysctl} o scrivendo nei file \sysctlrelfile{kernel}{msgmax},
 \itindbeg{linked~list}
 
 Una coda di messaggi è costituita da una \textit{linked list}.\footnote{una
-  \itindex{linked~list} \textit{linked list} è una tipica struttura di dati,
-  organizzati in una lista in cui ciascun elemento contiene un puntatore al
-  successivo. In questo modo la struttura è veloce nell'estrazione ed
-  immissione dei dati dalle estremità dalla lista (basta aggiungere un
-  elemento in testa o in coda ed aggiornare un puntatore), e relativamente
-  veloce da attraversare in ordine sequenziale (seguendo i puntatori), è
-  invece relativamente lenta nell'accesso casuale e nella ricerca.}  I nuovi
-messaggi vengono inseriti in coda alla lista e vengono letti dalla cima, in
-fig.~\ref{fig:ipc_mq_schema} si è riportato uno schema semplificato con cui
-queste strutture vengono mantenute dal kernel. Lo schema illustrato in realtà
-è una semplificazione di quello usato fino ai kernel della serie 2.2. A
-partire della serie 2.4 la gestione delle code di messaggi è effettuata in
-maniera diversa (e non esiste una struttura \struct{msqid\_ds} nel kernel), ma
-abbiamo mantenuto lo schema precedente dato che illustra in maniera più che
-adeguata i principi di funzionamento delle code di messaggi.
+  \textit{linked list} è una tipica struttura di dati, organizzati in una
+  lista in cui ciascun elemento contiene un puntatore al successivo. In questo
+  modo la struttura è veloce nell'estrazione ed immissione dei dati dalle
+  estremità dalla lista (basta aggiungere un elemento in testa o in coda ed
+  aggiornare un puntatore), e relativamente veloce da attraversare in ordine
+  sequenziale (seguendo i puntatori), è invece relativamente lenta
+  nell'accesso casuale e nella ricerca.}  I nuovi messaggi vengono inseriti in
+coda alla lista e vengono letti dalla cima, in fig.~\ref{fig:ipc_mq_schema} si
+è riportato uno schema semplificato con cui queste strutture vengono mantenute
+dal kernel. Lo schema illustrato in realtà è una semplificazione di quello
+usato fino ai kernel della serie 2.2. A partire della serie 2.4 la gestione
+delle code di messaggi è effettuata in maniera diversa (e non esiste una
+struttura \struct{msqid\_ds} nel kernel), ma abbiamo mantenuto lo schema
+precedente dato che illustra in maniera più che adeguata i principi di
+funzionamento delle code di messaggi.
 
 \itindend{linked~list}
 
@@ -1835,9 +1835,9 @@ lettura della risposta, quest'ultima resta nella coda (così come per le
 \textit{fifo} si aveva il problema delle \textit{fifo} che restavano nel
 filesystem). In questo caso però il problemi sono maggiori, sia perché è molto
 più facile esaurire la memoria dedicata ad una coda di messaggi che gli
-\itindex{inode} \textit{inode} di un filesystem, sia perché, con il riutilizzo
-dei \ids{PID} da parte dei processi, un client eseguito in un momento
-successivo potrebbe ricevere un messaggio non indirizzato a lui.
+\textit{inode} di un filesystem, sia perché, con il riutilizzo dei \ids{PID}
+da parte dei processi, un client eseguito in un momento successivo potrebbe
+ricevere un messaggio non indirizzato a lui.
 
 
 \subsection{I semafori}
@@ -4262,9 +4262,9 @@ sez.~\ref{sec:file_open_close}. Inoltre sul file descriptor viene sempre
 impostato il flag \const{FD\_CLOEXEC}.  Chiamate effettuate da diversi
 processi usando lo stesso nome restituiranno file descriptor associati allo
 stesso segmento, così come, nel caso di file ordinari, essi sono associati
-allo stesso \itindex{inode} inode. In questo modo è possibile effettuare una
-chiamata ad \func{mmap} sul file descriptor restituito da \func{shm\_open} ed
-i processi vedranno lo stesso segmento di memoria condivisa.
+allo stesso inode. In questo modo è possibile effettuare una chiamata ad
+\func{mmap} sul file descriptor restituito da \func{shm\_open} ed i processi
+vedranno lo stesso segmento di memoria condivisa.
 
 Quando il nome non esiste si può creare un nuovo segmento specificando
 \const{O\_CREAT}; in tal caso il segmento avrà (così come i nuovi file)
index 67b85253957b78caddf4b62ab5cff8dbd3b1b447..5daa9dd4bbd506c89cc4a73b6cb1a2bb7ea748c0 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
 }                                     % /proc/sys file name
 
+\newcommand{\sysctlfilem}[1]{%
+\texttt{/proc/sys/#1}%
+%\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1}@{{\tt {#1}}}}\texttt{/proc/sys/#1}%
+%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+}                                     % /proc/sys file name
+
 \newcommand{\sysctlrelfile}[2]{%
 \index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
 %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
index 4463fb009b9298f7d39feeeecbcae03fd2131174..070ce85b06fe9c166d894a8a86680766dcf0872f 100644 (file)
@@ -1097,8 +1097,8 @@ per i motivi visti in sez.~\ref{sec:sig_semantics}, può essere ottenuto
 chiamando \funcm{sysv\_signal}, una volta che si sia definita la macro
 \macro{\_XOPEN\_SOURCE}.  In generale, per evitare questi problemi, l'uso di
 \func{signal}, che tra l'altro ha un comportamento indefinito in caso di
-processo \itindex{thread} multi-\textit{thread}, è da evitare: tutti i nuovi
-programmi devono usare \func{sigaction}.
+processo multi-\textit{thread}, è da evitare: tutti i nuovi programmi devono
+usare \func{sigaction}.
 
 È da tenere presente che, seguendo lo standard POSIX, il comportamento di un
 processo che ignora i segnali \signal{SIGFPE}, \signal{SIGILL}, o
@@ -1437,22 +1437,21 @@ Si deve comunque tenere presente che fino al kernel 2.6.16 la precisione di
 queste funzioni era limitata dalla frequenza del timer di sistema, determinato
 dal valore della costante \texttt{HZ} di cui abbiamo già parlato in
 sez.~\ref{sec:proc_hierarchy}, in quanto le temporizzazioni erano calcolate in
-numero di interruzioni del timer (i cosiddetti \itindex{jiffies}
-``\textit{jiffies}''), ed era assicurato soltanto che il segnale non sarebbe
-stato mai generato prima della scadenza programmata (l'arrotondamento cioè era
-effettuato per eccesso).\footnote{questo in realtà non è del tutto vero a
-  causa di un bug, presente fino al kernel 2.6.12, che in certe circostanze
-  causava l'emissione del segnale con un arrotondamento per difetto.} 
-
-L'uso del contatore dei \itindex{jiffies} \textit{jiffies}, un intero a 32 bit
-nella maggior parte dei casi, comportava inoltre l'impossibilità di
-specificare tempi molto lunghi. superiori al valore della costante
-\const{MAX\_SEC\_IN\_JIFFIES}, pari, nel caso di default di un valore di
-\const{HZ} di 250, a circa 99 giorni e mezzo. Con il cambiamento della
-rappresentazione effettuato nel kernel 2.6.16 questo problema è scomparso e
-con l'introduzione dei timer ad alta risoluzione (vedi
-sez.~\ref{sec:sig_timer_adv}) nel kernel 2.6.21 la precisione è diventata
-quella fornita dall'hardware disponibile.
+numero di interruzioni del timer (i cosiddetti ``\textit{jiffies}''), ed era
+assicurato soltanto che il segnale non sarebbe stato mai generato prima della
+scadenza programmata (l'arrotondamento cioè era effettuato per
+eccesso).\footnote{questo in realtà non è del tutto vero a causa di un bug,
+  presente fino al kernel 2.6.12, che in certe circostanze causava l'emissione
+  del segnale con un arrotondamento per difetto.}
+
+L'uso del contatore dei \textit{jiffies}, un intero a 32 bit nella maggior
+parte dei casi, comportava inoltre l'impossibilità di specificare tempi molto
+lunghi. superiori al valore della costante \const{MAX\_SEC\_IN\_JIFFIES},
+pari, nel caso di default di un valore di \const{HZ} di 250, a circa 99 giorni
+e mezzo. Con il cambiamento della rappresentazione effettuato nel kernel
+2.6.16 questo problema è scomparso e con l'introduzione dei timer ad alta
+risoluzione (vedi sez.~\ref{sec:sig_timer_adv}) nel kernel 2.6.21 la
+precisione è diventata quella fornita dall'hardware disponibile.
 
 Una seconda causa di potenziali ritardi è che il segnale viene generato alla
 scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo
@@ -1466,9 +1465,8 @@ in cui un timer scade prima che il segnale di una precedente scadenza sia
 stato consegnato. In questo caso, per il comportamento dei segnali descritto
 in sez.~\ref{sec:sig_sigchld}, un solo segnale sarà consegnato. Per questo
 oggi l'uso di questa funzione è deprecato a favore degli
-\itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timer} e della
-cosiddetta \itindex{POSIX~Timer~API} \textit{POSIX Timer API}, che tratteremo
-in sez.~\ref{sec:sig_timer_adv}.
+\textit{high-resolution timer} e della cosiddetta \itindex{POSIX~Timer~API}
+\textit{POSIX Timer API}, che tratteremo in sez.~\ref{sec:sig_timer_adv}.
 
 Dato che sia \func{alarm} che \func{setitimer} non consentono di leggere il
 valore corrente di un timer senza modificarlo, è possibile usare la funzione
@@ -2835,9 +2833,9 @@ sez.~\ref{sec:sys_resource_limit}.
 
 Lo standard POSIX.1b definisce inoltre delle nuove funzioni di sistema che
 permettono di gestire l'attesa di segnali specifici su una coda, esse servono
-in particolar modo nel caso dei \itindex{thread} \textit{thread}, in cui si
-possono usare i segnali \textit{real-time} come meccanismi di comunicazione
-elementare; la prima di queste è \funcd{sigwait}, il cui prototipo è:
+in particolar modo nel caso dei \textit{thread}, in cui si possono usare i
+segnali \textit{real-time} come meccanismi di comunicazione elementare; la
+prima di queste è \funcd{sigwait}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{signal.h}
@@ -2872,7 +2870,7 @@ consegnato che essere ricevuto da \func{sigwait}, il tutto in maniera non
 prevedibile.
 
 Lo standard POSIX.1b definisce altre due funzioni di sistema, anch'esse usate
-prevalentemente con i \itindex{thread} \textit{thread}; \funcd{sigwaitinfo} e
+prevalentemente con i \textit{thread}; \funcd{sigwaitinfo} e
 \funcd{sigtimedwait}, i relativi prototipi sono:
 
 \begin{funcproto}{
@@ -2941,12 +2939,12 @@ dalla frequenza dello stesso che si ricordi, come già illustrato in
 sez.~\ref{sec:proc_hierarchy}, è data dal valore della costante \texttt{HZ}. 
 
 I contatori usati per il calcolo dei tempi infatti erano basati sul numero di
-\itindex{jiffies} \textit{jiffies} che vengono incrementati ad ogni
-\textit{clock tick} del timer di sistema, il che comportava anche, come
-accennato in sez.~\ref{sec:sig_alarm_abort} per \func{setitimer}, problemi per
-il massimo periodo di tempo copribile da alcuni di questi orologi, come quelli
-associati al \textit{process time} almeno fino a quando, con il kernel 2.6.16,
-non è stato rimosso il limite di un valore a 32 bit per i \textit{jiffies}.
+\textit{jiffies} che vengono incrementati ad ogni \textit{clock tick} del
+timer di sistema, il che comportava anche, come accennato in
+sez.~\ref{sec:sig_alarm_abort} per \func{setitimer}, problemi per il massimo
+periodo di tempo copribile da alcuni di questi orologi, come quelli associati
+al \textit{process time} almeno fino a quando, con il kernel 2.6.16, non è
+stato rimosso il limite di un valore a 32 bit per i \textit{jiffies}.
 
 \itindbeg{POSIX~Timer~API}
 
@@ -3012,12 +3010,10 @@ tab.~\ref{tab:sig_timer_clockid_types}.
                                   sez.~\ref{sec:sys_cpu_times}, nel totale di
                                   \textit{system time} e \textit{user time})
                                   comprensivo di tutto il tempo di CPU usato
-                                  da eventuali \itindex{thread}
-                                  \textit{thread}.\\
+                                  da eventuali \textit{thread}.\\
     \const{CLOCK\_THREAD\_CPUTIME\_ID}& Contatore del tempo di CPU
                                   (\textit{user time} e \textit{system time})
-                                  usato da un singolo \itindex{thread}
-                                  \textit{thread}.\\
+                                  usato da un singolo \textit{thread}.\\
     \hline
     \const{CLOCK\_MONOTONIC\_RAW}&Simile al precedente, ma non subisce gli
                                   aggiustamenti dovuti all'uso di NTP (viene
@@ -3347,8 +3343,8 @@ effettuata. Diventa così possibile indicare l'uso di un segnale o l'esecuzione
                              è 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
-                             \itindex{thread} \textit{thread} che esegue la
-                             funzione di notifica specificata da
+                             \textit{thread} che esegue la funzione di
+                             notifica specificata da 
                              \var{sigev\_notify\_function} con argomento
                              \var{sigev\_value}. Se questo è diverso da
                              \val{NULL}, il \textit{thread} viene creato con
index 06ba55f78e96f75ffc7b0a9869a933b43f6a816a..7c73bdd920977300e2db5df46e997a12ced45a6e 100644 (file)
@@ -1267,8 +1267,8 @@ utilizzata dalla funzione per riportare (come \textit{value result argument})
 i propri risultati. La funzione infatti è rientrante, ed alloca autonomamente
 tutta la memoria necessaria in cui verranno riportati i risultati della
 risoluzione.  La funzione scriverà all'indirizzo puntato da \param{res} il
-puntatore iniziale ad una \itindex{linked~list} \textit{linked list} di
-strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute.
+puntatore iniziale ad una \textit{linked list} di strutture di tipo
+\struct{addrinfo} contenenti tutte le informazioni ottenute.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1476,8 +1476,8 @@ lista illustrata in fig.~\ref{fig:sock_addrinfo_list}.
 \begin{figure}[!htb]
   \centering
   \includegraphics[width=10cm]{img/addrinfo_list}
-  \caption{La \itindex{linked~list} \textit{linked list} delle strutture
-    \struct{addrinfo} restituite da \func{getaddrinfo}.}
+  \caption{La \textit{linked list} delle strutture \struct{addrinfo}
+    restituite da \func{getaddrinfo}.}
   \label{fig:sock_addrinfo_list}
 \end{figure}
 
@@ -1573,9 +1573,9 @@ IPv4 address:
 \end{Verbatim}
 %$
 
-Una volta estratti i risultati dalla \itindex{linked~list} \textit{linked list}
-puntata da \param{res} se questa non viene più utilizzata si dovrà avere cura
-di disallocare opportunamente tutta la memoria, per questo viene fornita
+Una volta estratti i risultati dalla \textit{linked list} puntata
+da \param{res} se questa non viene più utilizzata si dovrà avere cura di
+disallocare opportunamente tutta la memoria, per questo viene fornita
 l'apposita funzione \funcd{freeaddrinfo}, il cui prototipo è:
 \begin{functions}
   \headdecl{netdb.h} 
index 031892523c6d0ece520d31735e464c8c82bb92c5..9e6abaf13bd26f79ab8054994b3b46ed1f4de5aa 100644 (file)
@@ -166,7 +166,7 @@ sez.~\ref{sec:sys_file_limits}.
     \const{STREAM\_MAX}&   8& Massimo numero di stream aperti per
                               processo in contemporanea.\\
     \const{TZNAME\_MAX}&   6& Dimensione massima del nome di una
-                              \itindex{timezone} \textit{timezone} (vedi
+                              \textit{timezone} (vedi
                               sez.~\ref{sec:sys_time_base})).\\  
     \const{NGROUPS\_MAX}& 32& Numero di gruppi supplementari per
                               processo (vedi sez.~\ref{sec:proc_access_id}).\\
@@ -204,7 +204,7 @@ file, riportate in tab.~\ref{tab:sys_file_macro}.
     \const{\_POSIX\_STREAM\_MAX} &    8& Massimo numero di stream aperti per
                                          processo in contemporanea.\\
     \const{\_POSIX\_TZNAME\_MAX} &    6& Dimensione massima del nome di una
-                                         \itindex{timezone} \textit{timezone}
+                                         \textit{timezone}
                                          (vedi sez.~\ref{sec:sys_date}). \\ 
     \const{\_POSIX\_RTSIG\_MAX}  &    8& Numero massimo di segnali
                                          \textit{real-time} (vedi
@@ -334,7 +334,7 @@ relative spiegazioni, si può trovare nel manuale delle \acr{glibc}.
                                   che specifica la macro {FOPEN\_MAX}.\\
       \texttt{\_SC\_TZNAME\_MAX}& \const{TZNAME\_MAX}&
                                   La dimensione massima di un nome di una
-                                  \itindex{timezone} \texttt{timezone} (vedi
+                                  \texttt{timezone} (vedi
                                   sez.~\ref{sec:sys_date}).\\
       \texttt{\_SC\_NGROUPS\_MAX}&\const{NGROUP\_MAX}&
                                   Massimo numero di gruppi supplementari che
@@ -714,9 +714,9 @@ informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
-\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} (che
-tratteremo brevemente in sez.~\ref{sec:sock_resolver}) dato che la sua
-applicazione è cruciale nella procedura di risoluzione di nomi di rete.
+\textit{Name Service Switch} (che tratteremo brevemente in
+sez.~\ref{sec:sock_resolver}) dato che la sua applicazione è cruciale nella
+procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
@@ -1547,10 +1547,9 @@ dell'esaurimento della propria \textit{time-slice} (in genere a causa di una
 interrotto da un processo a priorità maggiore. I campi \var{ru\_inblock} e
 \var{ru\_oublock} indicano invece il numero di volte che è stata eseguita una
 attività di I/O su un filesystem (rispettivamente in lettura e scrittura) ed
-infine \var{ru\_maxrss} indica il valore più alto della
-\itindex{Resident~Set~Size~(RSS)} \textit{Resident Set Size} raggiunto dal
-processo stesso o, nel caso sia stato usato \const{RUSAGE\_CHILDREN}, da uno
-dei suoi figli.
+infine \var{ru\_maxrss} indica il valore più alto della \textit{Resident Set
+  Size} raggiunto dal processo stesso o, nel caso sia stato usato
+\const{RUSAGE\_CHILDREN}, da uno dei suoi figli.
  
 Si tenga conto che per un errore di implementazione nei i kernel precedenti il
 2.6.9, nonostante questo fosse esplicitamente proibito dallo standard POSIX.1,
@@ -1700,10 +1699,10 @@ riportati nel seguente elenco:
   con un errore di \errcode{EFBIG}.
 
 \item[\const{RLIMIT\_LOCKS}] Questa risorsa indica il numero massimo di
-  \itindex{file~locking} \textit{file lock} (vedi sez.~\ref{sec:file_locking})
-  e di \textit{file lease} (vedi sez.~\ref{sec:file_asyncronous_lease}) che un
-  processo poteva effettuare.  È un limite presente solo nelle prime versioni
-  del kernel 2.4, pertanto non deve essere più utilizzato.
+  \textit{file lock} (vedi sez.~\ref{sec:file_locking}) e di \textit{file
+    lease} (vedi sez.~\ref{sec:file_asyncronous_lease}) che un processo poteva
+  effettuare.  È un limite presente solo nelle prime versioni del kernel 2.4,
+  pertanto non deve essere più utilizzato.
 
 \item[\const{RLIMIT\_MEMLOCK}] Questa risorsa indica, in byte, l'ammontare
   massimo di memoria che può essere bloccata in RAM da un processo (vedi
@@ -2047,6 +2046,7 @@ gestione di data e ora.
 \label{sec:sys_unix_time}
 
 \itindbeg{calendar~time}
+\itindbeg{process~time}
 
 Tradizionalmente nei sistemi unix-like sono sempre stati previsti due tipi
 distinti di tempi, caratterizzati da altrettante modalità di misura ed
@@ -2062,14 +2062,13 @@ espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar
   tradizionalmente misurato in secondi a partire dalla mezzanotte del
   primo gennaio 1970, data che viene chiamata \textit{the Epoch}.
 
-\item[\textit{process time}] \itindex{process~time} detto anche \textsl{tempo
-    di processore} o \textsl{tempo di CPU}. Si tratta del tempo impiegato da
-  un processore nell'esecuzione del codice di un programma all'interno di un
-  processo. Per esprimere questo tempo è stato riservato il tipo
-  \type{clock\_t}, e viene misurato nei cosiddetti \itindex{clock~tick}
-  \textit{clock tick}, tradizionalmente corrispondenti al numero di
-  interruzioni del processore da parte del timer di sistema. A differenza del
-  precedente indica soltanto un intervallo di durata.
+\item[\textit{process time}] detto anche \textsl{tempo di processore} o
+  \textsl{tempo di CPU}. Si tratta del tempo impiegato da un processore
+  nell'esecuzione del codice di un programma all'interno di un processo. Per
+  esprimere questo tempo è stato riservato il tipo \type{clock\_t}, e viene
+  misurato nei cosiddetti \textit{clock tick}, tradizionalmente corrispondenti
+  al numero di interruzioni del processore da parte del timer di sistema. A
+  differenza del precedente indica soltanto un intervallo di durata.
 \end{basedescript}
 
 Il \textit{calendar time} viene sempre mantenuto facendo riferimento
@@ -2104,11 +2103,10 @@ in presenza di cambi di fusi orari.
 
 \itindend{calendar~time}
 
-Il \itindex{process~time} \textit{process time} invece indica sempre una
-misura di un lasso di tempo e viene usato per tenere conto dei tempi di
-esecuzione dei processi. Esso viene sempre diviso in \textit{user time} e
-\textit{system time}, per misurare la durata di ciascun processo il kernel
-infatti calcola tre tempi:
+Il \textit{process time} invece indica sempre una misura di un lasso di tempo
+e viene usato per tenere conto dei tempi di esecuzione dei processi. Esso
+viene sempre diviso in \textit{user time} e \textit{system time}, per misurare
+la durata di ciascun processo il kernel infatti calcola tre tempi:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{clock time}] il tempo \textsl{reale}, viene chiamato anche
   \textit{wall clock time} o \textit{elapsed time}, passato dall'avvio del
@@ -2135,6 +2133,7 @@ processo. Si può ottenere un riassunto dei valori di questi tempi quando si
 esegue un qualsiasi programma lanciando quest'ultimo come argomento del
 comando \cmd{time}.
 
+\itindend{process~time}
 \itindbeg{clock~tick}
 
 Come accennato il \textit{process time} viene misurato nei cosiddetti
@@ -2156,6 +2155,7 @@ 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
@@ -2179,10 +2179,9 @@ costante del kernel \const{USER\_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
-\itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timers} (HRT) è
-divenuto possibile ottenere, per le funzioni di attesa ed i timer, la massima
-risoluzione possibile fornita dall'hardware. Torneremo su questo in
-sez.~\ref{sec:sig_timer_adv}.
+\textit{high-resolution timers} (HRT) è divenuto possibile ottenere, per le
+funzioni di attesa ed i timer, la massima risoluzione possibile fornita
+dall'hardware. Torneremo su questo in sez.~\ref{sec:sig_timer_adv}.
 
 \itindend{clock~tick}
 
@@ -2190,8 +2189,6 @@ sez.~\ref{sec:sig_timer_adv}.
 \subsection{La gestione del \textit{process time}}
 \label{sec:sys_cpu_times}
 
-\itindbeg{process~time}
-
 Di norma tutte le operazioni del sistema fanno sempre riferimento al
 \textit{calendar time}, l'uso del \textit{process time} è riservato a
 quei casi in cui serve conoscere i tempi di esecuzione di un processo
@@ -2324,8 +2321,6 @@ indicando un errore, nei primi secondi dopo il boot (per la precisione nei
 primi 41 secondi) e se il valore del contatore eccede le dimensione del tipo
 \type{clock\_t}.
 
-\itindend{process~time}
-
 
 \subsection{Le funzioni per il \textit{calendar time}}
 \label{sec:sys_time_base}
@@ -2417,15 +2412,19 @@ capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di una condizione generale
 che continua a valere per qualunque funzione che vada a modificare l'orologio
 di sistema, comprese tutte quelle che tratteremo in seguito.
 
+\itindbeg{timezone}
+
 Il secondo argomento di entrambe le funzioni è una struttura
 \struct{timezone}, che storicamente veniva utilizzata per specificare appunto
-la \itindex{timezone} \textit{timezone}, cioè l'insieme del fuso orario e
-delle convenzioni per l'ora legale che permettevano il passaggio dal tempo
+la cosiddetta \textit{timezone}, cioè l'insieme del fuso orario e delle
+convenzioni per l'ora legale che permettevano il passaggio dal tempo
 universale all'ora locale. Questo argomento oggi è obsoleto ed in Linux non è
 mai stato utilizzato; esso non è supportato né dalle vecchie \textsl{libc5},
 né dalle \textsl{glibc}: pertanto quando si chiama questa funzione deve essere
 sempre impostato a \val{NULL}.
 
+\itindbeg{timezone}
+
 Modificare l'orologio di sistema con queste funzioni è comunque problematico,
 in quanto esse effettuano un cambiamento immediato. Questo può creare dei
 buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
@@ -2617,11 +2616,10 @@ sintassi specificata per la forma equivalente di questa funzione definita come
 \code{ADJ}.
 
 Si tenga presente infine che con l'introduzione a partire dal kernel 2.6.21
-degli \itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timer} ed
-il supporto per i cosiddetti POSIX \textit{real-time clock}, si può ottenere
-il \textit{calendar time} direttamente da questi, come vedremo in
-sez.~\ref{sec:sig_timer_adv}, con la massima risoluzione possibile per
-l'hardware della macchina.
+degli \textit{high-resolution timer} ed il supporto per i cosiddetti POSIX
+\textit{real-time clock}, si può ottenere il \textit{calendar time}
+direttamente da questi, come vedremo in sez.~\ref{sec:sig_timer_adv}, con la
+massima risoluzione possibile per l'hardware della macchina.
 
 
 
@@ -2712,9 +2710,9 @@ Sun Apr 29 19:47:44 2012\n"
 \end{Example}
 
 Nel caso di \func{ctime} la funzione tiene conto della eventuale impostazione
-di una \itindex{timezone} \textit{timezone} e effettua una chiamata preventiva
-a \func{tzset} (che vedremo a breve), in modo che la data espressa tenga conto
-del fuso orario. In realtà \func{ctime} è banalmente definita in termini di
+di una \textit{timezone} e effettua una chiamata preventiva a \func{tzset}
+(che vedremo a breve), in modo che la data espressa tenga conto del fuso
+orario. In realtà \func{ctime} è banalmente definita in termini di
 \func{asctime} come \code{asctime(localtime(t)}.
 
 Dato che l'uso di una stringa statica rende le funzioni non rientranti
@@ -2790,7 +2788,7 @@ della variabile globale \var{tzname}.
     \includestruct{listati/time_zone_var.c}
   \end{minipage} 
   \normalsize 
-  \caption{Le variabili globali usate per la gestione delle \itindex{timezone}
+  \caption{Le variabili globali usate per la gestione delle
     \textit{timezone}.}
   \label{fig:sys_tzname}
 \end{figure}
@@ -2798,12 +2796,12 @@ della variabile globale \var{tzname}.
 Come accennato l'uso del \textit{broken-down time} permette di tenere conto
 anche della differenza fra tempo universale e ora locale, compresa l'eventuale
 ora legale.  Questo viene fatto dalle funzioni di conversione grazie alle
-informazioni riguardo la propria \itindex{timezone} \textit{timezone}
-mantenute nelle tre variabili globali mostrate in fig.~\ref{fig:sys_tzname},
-cui si si può accedere direttamente includendo \headfile{time.h}. Come
-illustrato queste variabili vengono impostate internamente da alcune delle
-delle precedenti funzioni di conversione, ma lo si può fare esplicitamente
-chiamando direttamente la funzione \funcd{tzset}, il cui prototipo è:
+informazioni riguardo la propria \textit{timezone} mantenute nelle tre
+variabili globali mostrate in fig.~\ref{fig:sys_tzname}, cui si si può
+accedere direttamente includendo \headfile{time.h}. Come illustrato queste
+variabili vengono impostate internamente da alcune delle delle precedenti
+funzioni di conversione, ma lo si può fare esplicitamente chiamando
+direttamente la funzione \funcd{tzset}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{time.h}
@@ -2818,11 +2816,11 @@ 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 \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}
-sono indicate come \code{char *} non è il caso di modificare queste
-stringhe. La variabile \var{timezone} indica la differenza di fuso orario in
-secondi, mentre \var{daylight} indica se è attiva o meno l'ora legale.
+\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} sono indicate come
+\code{char *} non è il caso di modificare queste stringhe. La variabile
+\var{timezone} indica la differenza di fuso orario in secondi, mentre
+\var{daylight} indica se è attiva o meno l'ora legale.
 
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
@@ -2881,8 +2879,7 @@ lo stato di \param{s} è indefinito.
     \var{\%X}&\texttt{18:40:50}   & L'ora.\\ 
     \var{\%y}&\texttt{02}         & Anno nel secolo.\\ 
     \var{\%Y}&\texttt{2002}       & Anno.\\ 
-    \var{\%Z}&\texttt{CEST}       & Nome della \itindex{timezone}
-                                    \textit{timezone}.\\  
+    \var{\%Z}&\texttt{CEST}       & Nome della \textit{timezone}.\\  
     \var{\%\%}&\texttt{\%}        & Il carattere \%.\\ 
     \hline
   \end{tabular}
@@ -2949,7 +2946,7 @@ un errore nell'esecuzione di una funzione, ma di norma questo viene riportato
 semplicemente usando un opportuno valore di ritorno della funzione invocata.
 Inoltre il sistema di classificazione degli errori è stato progettato
 sull'architettura a processi, e presenta una serie di problemi nel caso lo si
-debba usare con i \itindex{thread} \textit{thread}.
+debba usare con i \textit{thread}.
 
 
 \subsection{La variabile \var{errno}}
@@ -2967,11 +2964,11 @@ che c'è stato un errore, e non il tipo di errore.
 
 Per riportare il tipo di errore il sistema usa la variabile globale
 \var{errno}, definita nell'header \headfile{errno.h}.  Come accennato l'uso di
-una variabile globale può comportare problemi nel caso dei \itindex{thread}
-\textit{thread}, ma lo standard ISO C consente anche di definire \var{errno}
-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}.
+una variabile globale può comportare problemi nel caso dei \textit{thread}, ma
+lo standard ISO C consente anche di definire \var{errno} 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
+\textit{thread}.
 
 La variabile è in genere definita come \dirct{volatile} dato che può essere
 cambiata in modo asincrono da un segnale, per un esempio si veda
@@ -3044,9 +3041,9 @@ La funzione \func{strerror} utilizza una stringa statica che non deve essere
 modificata dal programma; essa è utilizzabile solo fino ad una chiamata
 successiva a \func{strerror} o \func{perror} e nessun'altra funzione di
 libreria tocca questa stringa. In ogni caso l'uso di una stringa statica rende
-la funzione non rientrante, per cui nel caso si usino i \itindex{thread}
-\textit{thread} la \acr{glibc} fornisce una apposita versione rientrante
-\funcd{strerror\_r}, il cui prototipo è:
+la funzione non rientrante, per cui nel caso si usino i \textit{thread} la
+\acr{glibc} fornisce una apposita versione rientrante \funcd{strerror\_r}, il
+cui prototipo è:
 
 \begin{funcproto}{
 \fhead{string.h}
@@ -3073,10 +3070,10 @@ restituita a \param{size}, a cui si accede definendo le opportune macro (per
 le quali si rimanda alla lettura della pagina di manuale). 
 
 La funzione è analoga a \func{strerror} ma restituisce la stringa di errore
-nel buffer \param{buf} che il singolo \itindex{thread} \textit{thread} deve
-allocare autonomamente per evitare i problemi connessi alla condivisione del
-buffer statico. Il messaggio è copiato fino alla dimensione massima del
-buffer, specificata dall'argomento \param{size}, che deve comprendere pure il
+nel buffer \param{buf} che il singolo \textit{thread} deve allocare
+autonomamente per evitare i problemi connessi alla condivisione del buffer
+statico. Il messaggio è copiato fino alla dimensione massima del buffer,
+specificata dall'argomento \param{size}, che deve comprendere pure il
 carattere di terminazione; altrimenti la stringa risulterà troncata.
 
 Una seconda funzione usata per riportare i codici di errore in maniera