Ancora reindicizzazioni
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 30 Oct 2015 00:28:47 +0000 (00:28 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 30 Oct 2015 00:28:47 +0000 (00:28 +0000)
fileadv.tex
fileio.tex
ipc.tex
signal.tex

index 97948406c5096d983169cc6ee0b67f6938ea4a4b..440bc32336ebf60b003c286814b5b2547bfb4e59 100644 (file)
@@ -187,11 +187,11 @@ riportate in tab.~\ref{tab:file_flock_operation}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{LOCK\_SH} & Richiede uno \textit{shared lock} sul file.\\ 
-    \const{LOCK\_EX} & Richiede un \textit{esclusive lock} sul file.\\
-    \const{LOCK\_UN} & Rilascia il \textit{file lock}.\\
-    \const{LOCK\_NB} & Impedisce che la funzione si blocchi nella
-                       richiesta di un \textit{file lock}.\\
+    \constd{LOCK\_SH} & Richiede uno \textit{shared lock} sul file.\\ 
+    \constd{LOCK\_EX} & Richiede un \textit{esclusive lock} sul file.\\
+    \constd{LOCK\_UN} & Rilascia il \textit{file lock}.\\
+    \constd{LOCK\_NB} & Impedisce che la funzione si blocchi nella
+                        richiesta di un \textit{file lock}.\\
     \hline    
   \end{tabular}
   \caption{Valori dell'argomento \param{operation} di \func{flock}.}
@@ -241,8 +241,8 @@ In particolare, come accennato in fig.~\ref{fig:file_flock_struct}, i
 mantenuto dal campo \var{i\_flock} della struttura \kstruct{inode} (per le
 definizioni esatte si faccia riferimento al file \file{include/linux/fs.h} nei
 sorgenti del kernel).  Un bit del campo \var{fl\_flags} di specifica se si
-tratta di un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX
-(\const{FL\_POSIX}) o un \textit{file lease} (\const{FL\_LEASE}, vedi
+tratta di un lock in semantica BSD (\constd{FL\_FLOCK}) o POSIX
+(\constd{FL\_POSIX}) o un \textit{file lease} (\constd{FL\_LEASE}, vedi
 sez.~\ref{sec:file_asyncronous_lease}).
 
 \begin{figure}[!htb]
@@ -400,9 +400,9 @@ viene usato solo in caso di lettura, quando si chiama \func{fcntl} con
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{F\_RDLCK} & Richiede un blocco condiviso (\textit{read lock}).\\
-    \const{F\_WRLCK} & Richiede un blocco esclusivo (\textit{write lock}).\\
-    \const{F\_UNLCK} & Richiede l'eliminazione di un \textit{file lock}.\\
+    \constd{F\_RDLCK} & Richiede un blocco condiviso (\textit{read lock}).\\
+    \constd{F\_WRLCK} & Richiede un blocco esclusivo (\textit{write lock}).\\
+    \constd{F\_UNLCK} & Richiede l'eliminazione di un \textit{file lock}.\\
     \hline    
   \end{tabular}
   \caption{Valori possibili per il campo \var{l\_type} di \struct{flock}.}
@@ -415,18 +415,18 @@ effettivamente svolta dalla funzione è stabilita dal valore dall'argomento
 specifica l'azione da compiere; i valori utilizzabili relativi al \textit{file
   locking} sono tre:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{F\_GETLK}] verifica se il \textit{file lock} specificato dalla
+\item[\constd{F\_GETLK}] verifica se il \textit{file lock} specificato dalla
   struttura puntata da \param{lock} può essere acquisito: in caso negativo
   sovrascrive la struttura \param{flock} con i valori relativi al blocco già
   esistente che ne blocca l'acquisizione, altrimenti si limita a impostarne il
   campo \var{l\_type} con il valore \const{F\_UNLCK}.
-\item[\const{F\_SETLK}] se il campo \var{l\_type} della struttura puntata da
+\item[\constd{F\_SETLK}] se il campo \var{l\_type} della struttura puntata da
   \param{lock} è \const{F\_RDLCK} o \const{F\_WRLCK} richiede il
   corrispondente \textit{file lock}, se è \const{F\_UNLCK} lo rilascia; nel
   caso la richiesta non possa essere soddisfatta a causa di un blocco
   preesistente la funzione ritorna immediatamente con un errore di
   \errcode{EACCES} o di \errcode{EAGAIN}.
-\item[\const{F\_SETLKW}] è identica a \const{F\_SETLK}, ma se la richiesta di
+\item[\constd{F\_SETLKW}] è identica a \const{F\_SETLK}, ma se la richiesta di
   non può essere soddisfatta per la presenza di un altro blocco, mette il
   processo in stato di attesa fintanto che il blocco precedente non viene
   rilasciato; se l'attesa viene interrotta da un segnale la funzione ritorna
@@ -779,17 +779,17 @@ dell'argomento \param{cmd}, che specifica quale azione eseguire, i soli valori
 consentiti sono i seguenti:
 
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{F\_LOCK}] Richiede un \textit{lock} esclusivo sul file, e blocca
+\item[\constd{F\_LOCK}] Richiede un \textit{lock} esclusivo sul file, e blocca
   il processo chiamante se, anche parzialmente, la sezione indicata si
   sovrappone ad una che è già stata bloccata da un altro processo; in caso di
   sovrapposizione con un altro blocco già ottenuto le sezioni vengono unite.
-\item[\const{F\_TLOCK}] Richiede un \textit{exclusive lock}, in maniera
+\item[\constd{F\_TLOCK}] Richiede un \textit{exclusive lock}, in maniera
   identica a \const{F\_LOCK}, ma in caso di indisponibilità non blocca il
   processo restituendo un errore di \errval{EAGAIN}.
-\item[\const{F\_ULOCK}] Rilascia il blocco sulla sezione indicata, questo può
+\item[\constd{F\_ULOCK}] Rilascia il blocco sulla sezione indicata, questo può
   anche causare la suddivisione di una sezione bloccata in precedenza nelle
   due parti eccedenti nel caso si sia indicato un intervallo più limitato.
-\item[\const{F\_TEST}] Controlla la presenza di un blocco sulla sezione di
+\item[\constd{F\_TEST}] Controlla la presenza di un blocco sulla sezione di
   file indicata, \func{lockf} ritorna $0$ se la sezione è libera o bloccata
   dal processo stesso, o $-1$ se è bloccata da un altro processo, nel qual
   caso \var{errno} assume il valore \errval{EAGAIN} (ma su alcuni sistemi può
@@ -935,16 +935,16 @@ I/O.
 \label{sec:file_noblocking}
 
 Abbiamo visto in sez.~\ref{sec:sig_gen_beha}, affrontando la suddivisione fra
-\textit{fast} e \textit{slow} \textit{system call},\index{system~call~lente}
-che in certi casi le funzioni di I/O eseguite su un file descriptor possono
-bloccarsi indefinitamente. Questo non avviene mai per i file normali, per i
-quali le funzioni di lettura e scrittura ritornano sempre subito, ma può
-avvenire per alcuni file di dispositivo, come ad esempio una seriale o un
-terminale, o con l'uso di file descriptor collegati a meccanismi di
-intercomunicazione come le \textit{pipe} (vedi sez.~\ref{sec:ipc_unix}) ed i
-socket (vedi sez.~\ref{sec:sock_socket_def}). In casi come questi ad esempio
-una operazione di lettura potrebbe bloccarsi se non ci sono dati disponibili
-sul descrittore su cui la si sta effettuando.
+\textit{fast} e \textit{slow} \textit{system call}, che in certi casi le
+funzioni di I/O eseguite su un file descriptor possono bloccarsi
+indefinitamente. Questo non avviene mai per i file normali, per i quali le
+funzioni di lettura e scrittura ritornano sempre subito, ma può avvenire per
+alcuni file di dispositivo, come ad esempio una seriale o un terminale, o con
+l'uso di file descriptor collegati a meccanismi di intercomunicazione come le
+\textit{pipe} (vedi sez.~\ref{sec:ipc_unix}) ed i socket (vedi
+sez.~\ref{sec:sock_socket_def}). In casi come questi ad esempio una operazione
+di lettura potrebbe bloccarsi se non ci sono dati disponibili sul descrittore
+su cui la si sta effettuando.
 
 Questo comportamento è alla radice di una delle problematiche più comuni che
 ci si trova ad affrontare nella gestione delle operazioni di I/O: la necessità
@@ -1063,7 +1063,7 @@ identifica un insieme di segnali. Per la manipolazione di questi \textit{file
 
 
 In genere un \textit{file descriptor set} può contenere fino ad un massimo di
-\const{FD\_SETSIZE} file descriptor.  Questo valore in origine corrispondeva
+\macrod{FD\_SETSIZE} file descriptor.  Questo valore in origine corrispondeva
 al limite per il numero massimo di file aperti (ad esempio in Linux, fino alla
 serie 2.0.x, c'era un limite di 256 file per processo), ma da quando, nelle
 versioni più recenti del kernel, questo limite è stato rimosso, esso indica le
@@ -1075,7 +1075,7 @@ Si tenga presente che i \textit{file descriptor set} devono sempre essere
 inizializzati con \macro{FD\_ZERO}; passare a \func{select} un valore non
 inizializzato può dar luogo a comportamenti non prevedibili. Allo stesso modo
 usare \macro{FD\_SET} o \macro{FD\_CLR} con un file descriptor il cui valore
-eccede \const{FD\_SETSIZE} può dare luogo ad un comportamento indefinito.
+eccede \macro{FD\_SETSIZE} può dare luogo ad un comportamento indefinito.
 
 La funzione richiede di specificare tre insiemi distinti di file descriptor;
 il primo, \param{readfds}, verrà osservato per rilevare la disponibilità di
@@ -1087,7 +1087,7 @@ il terzo, \param{exceptfds}, per verificare l'esistenza di eccezioni come i
 dati urgenti su un socket, (vedi sez.~\ref{sec:TCP_urgent_data}).
 
 Dato che in genere non si tengono mai sotto controllo fino a
-\const{FD\_SETSIZE} file contemporaneamente, la funzione richiede di
+\macro{FD\_SETSIZE} file contemporaneamente, la funzione richiede di
 specificare qual è il valore più alto fra i file descriptor indicati nei tre
 insiemi precedenti. Questo viene fatto per efficienza, per evitare di passare
 e far controllare al kernel una quantità di memoria superiore a quella
@@ -1360,22 +1360,22 @@ errore.
     \textbf{Flag}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{POLLIN}    & È possibile la lettura.\\
-    \const{POLLRDNORM}& Sono disponibili in lettura dati normali.\\ 
-    \const{POLLRDBAND}& Sono disponibili in lettura dati prioritari.\\
-    \const{POLLPRI}   & È possibile la lettura di dati urgenti.\\ 
+    \constd{POLLIN}    & È possibile la lettura.\\
+    \constd{POLLRDNORM}& Sono disponibili in lettura dati normali.\\ 
+    \constd{POLLRDBAND}& Sono disponibili in lettura dati prioritari.\\
+    \constd{POLLPRI}   & È possibile la lettura di dati urgenti.\\ 
     \hline
-    \const{POLLOUT}   & È possibile la scrittura immediata.\\
-    \const{POLLWRNORM}& È possibile la scrittura di dati normali.\\ 
-    \const{POLLWRBAND}& È possibile la scrittura di dati prioritari.\\
+    \constd{POLLOUT}   & È possibile la scrittura immediata.\\
+    \constd{POLLWRNORM}& È possibile la scrittura di dati normali.\\ 
+    \constd{POLLWRBAND}& È possibile la scrittura di dati prioritari.\\
     \hline
-    \const{POLLERR}   & C'è una condizione di errore.\\
-    \const{POLLHUP}   & Si è verificato un hung-up.\\
-    \const{POLLRDHUP} & Si è avuta una \textsl{half-close} su un
+    \constd{POLLERR}   & C'è una condizione di errore.\\
+    \constd{POLLHUP}   & Si è verificato un hung-up.\\
+    \constd{POLLRDHUP} & Si è avuta una \textsl{half-close} su un
                         socket.\footnotemark\\ 
-    \const{POLLNVAL}  & Il file descriptor non è aperto.\\
+    \constd{POLLNVAL}  & Il file descriptor non è aperto.\\
     \hline
-    \const{POLLMSG}   & Definito per compatibilità con SysV.\\
+    \constd{POLLMSG}   & Definito per compatibilità con SysV.\\
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit dei campi
@@ -1620,7 +1620,7 @@ La seconda versione della funzione, \func{epoll\_create1} è stata introdotta
 come estensione della precedente (è disponibile solo a partire dal kernel
 2.6.27) per poter passare dei flag di controllo come maschera binaria in fase
 di creazione del file descriptor. Al momento l'unico valore legale
-per \param{flags} (a parte lo zero) è \const{EPOLL\_CLOEXEC}, che consente di
+per \param{flags} (a parte lo zero) è \constd{EPOLL\_CLOEXEC}, che consente di
 impostare in maniera atomica sul file descriptor il flag di
 \textit{close-on-exec} (si è trattato il significato di \const{O\_CLOEXEC} in
 sez.~\ref{sec:file_open_close}), senza che sia necessaria una successiva
@@ -1683,16 +1683,16 @@ delle operazioni cui fanno riferimento.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{EPOLL\_CTL\_ADD}& Aggiunge un nuovo file descriptor da osservare
-                             \param{fd} alla lista dei file descriptor
-                             controllati tramite \param{epfd}, in
-                             \param{event} devono essere specificate le
-                             modalità di osservazione.\\
-    \const{EPOLL\_CTL\_MOD}& Modifica le modalità di osservazione del file
-                             descriptor \param{fd} secondo il contenuto di
-                             \param{event}.\\
-    \const{EPOLL\_CTL\_DEL}& Rimuove il file descriptor \param{fd} dalla lista
-                             dei file controllati tramite \param{epfd}.\\
+    \constd{EPOLL\_CTL\_ADD}& Aggiunge un nuovo file descriptor da osservare
+                              \param{fd} alla lista dei file descriptor
+                              controllati tramite \param{epfd}, in
+                              \param{event} devono essere specificate le
+                              modalità di osservazione.\\
+    \constd{EPOLL\_CTL\_MOD}& Modifica le modalità di osservazione del file
+                              descriptor \param{fd} secondo il contenuto di
+                              \param{event}.\\
+    \constd{EPOLL\_CTL\_DEL}& Rimuove il file descriptor \param{fd} dalla lista
+                              dei file controllati tramite \param{epfd}.\\
    \hline    
   \end{tabular}
   \caption{Valori dell'argomento \param{op} che consentono di scegliere quale
@@ -1790,34 +1790,34 @@ modificano le modalità di notifica.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{EPOLLIN}     & Il file è pronto per le operazioni di lettura
+    \constd{EPOLLIN}     & Il file è pronto per le operazioni di lettura
                           (analogo di \const{POLLIN}).\\
-    \const{EPOLLOUT}    & Il file è pronto per le operazioni di scrittura
+    \constd{EPOLLOUT}    & Il file è pronto per le operazioni di scrittura
                           (analogo di \const{POLLOUT}).\\
-    \const{EPOLLRDHUP}  & L'altro capo di un socket di tipo
+    \constd{EPOLLRDHUP}  & L'altro capo di un socket di tipo
                           \const{SOCK\_STREAM} (vedi sez.~\ref{sec:sock_type})
                           ha chiuso la connessione o il capo in scrittura
                           della stessa (vedi
                           sez.~\ref{sec:TCP_shutdown}).\footnotemark\\
-    \const{EPOLLPRI}    & Ci sono dati urgenti disponibili in lettura (analogo
+    \constd{EPOLLPRI}    & Ci sono dati urgenti disponibili in lettura (analogo
                           di \const{POLLPRI}); questa condizione viene comunque
                           riportata in uscita, e non è necessaria impostarla
                           in ingresso.\\ 
     \hline
-    \const{EPOLLERR}    & Si è verificata una condizione di errore 
+    \constd{EPOLLERR}    & Si è verificata una condizione di errore 
                           (analogo di \const{POLLERR}); questa condizione
                           viene comunque riportata in uscita, e non è
                           necessaria impostarla in ingresso.\\
-    \const{EPOLLHUP}    & Si è verificata una condizione di hung-up; questa
+    \constd{EPOLLHUP}    & Si è verificata una condizione di hung-up; questa
                           condizione viene comunque riportata in uscita, e non
                           è necessaria impostarla in ingresso.\\
     \hline
-    \const{EPOLLET}     & Imposta la notifica in modalità \textit{edge
+    \constd{EPOLLET}     & Imposta la notifica in modalità \textit{edge
                             triggered} per il file descriptor associato.\\ 
-    \const{EPOLLONESHOT}& Imposta la modalità \textit{one-shot} per il file
+    \constd{EPOLLONESHOT}& Imposta la modalità \textit{one-shot} per il file
                           descriptor associato (questa modalità è disponibile
                           solo a partire dal kernel 2.6.2).\\
-    \const{EPOLLWAKEUP} & Attiva la prevenzione della sospensione del sistema
+    \constd{EPOLLWAKEUP} & Attiva la prevenzione della sospensione del sistema
                           se il file descriptor che si è marcato con esso
                           diventa pronto (aggiunto a partire dal kernel 3.5),
                           può essere impostato solo dall'amministratore (o da
@@ -2027,8 +2027,8 @@ gestire, quando si deve tener conto di entrambi i tipi di eventi, le
 interruzioni delle funzioni di attesa sincrone, ed evitare possibili
 \textit{race conditions}. In sostanza se non ci fossero i segnali non ci
 sarebbe da preoccuparsi, fintanto che si effettuano operazioni all'interno di
-un processo, della non atomicità delle \index{system~call~lente}
-\textit{system call} lente che vengono interrotte e devono essere riavviate.
+un processo, della non atomicità delle \textit{system call} lente che vengono
+interrotte e devono essere riavviate.
 
 Abbiamo visto però in sez.~\ref{sec:sig_real_time} che insieme ai segnali
 \textit{real-time} sono state introdotte anche delle interfacce di gestione
@@ -2134,9 +2134,9 @@ tab.~\ref{tab:signalfd_flags}.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{SFD\_NONBLOCK}& imposta sul file descriptor il flag di
+    \constd{SFD\_NONBLOCK}&imposta sul file descriptor il flag di
                            \const{O\_NONBLOCK} per renderlo non bloccante.\\ 
-    \const{SFD\_CLOEXEC}&  imposta il flag di \const{O\_CLOEXEC} per la
+    \constd{SFD\_CLOEXEC}& imposta il flag di \const{O\_CLOEXEC} per la
                            chiusura automatica del file descriptor nella
                            esecuzione di \func{exec}.\\
     \hline    
@@ -2479,11 +2479,11 @@ tab.~\ref{tab:timerfd_flags}.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{TFD\_NONBLOCK}& imposta sul file descriptor il flag di
-                           \const{O\_NONBLOCK} per renderlo non bloccante.\\ 
-    \const{TFD\_CLOEXEC}&  imposta il flag di \const{O\_CLOEXEC} per la
-                           chiusura automatica del file descriptor nella
-                           esecuzione di \func{exec}.\\
+    \constd{TFD\_NONBLOCK}& imposta sul file descriptor il flag di
+                            \const{O\_NONBLOCK} per renderlo non bloccante.\\ 
+    \constd{TFD\_CLOEXEC} & imposta il flag di \const{O\_CLOEXEC} per la
+                            chiusura automatica del file descriptor nella
+                            esecuzione di \func{exec}.\\
     \hline    
   \end{tabular}
   \caption{Valori dell'argomento \param{flags} per la funzione
@@ -2548,7 +2548,7 @@ con \param{new\_value.it\_interval} la sua periodicità.  L'unica differenza
 riguarda l'argomento \param{flags} che serve sempre ad indicare se il tempo di
 scadenza del timer è da considerarsi relativo o assoluto rispetto al valore
 corrente dell'orologio associato al timer, ma che in questo caso ha come
-valori possibili rispettivamente soltanto $0$ e \const{TFD\_TIMER\_ABSTIME}
+valori possibili rispettivamente soltanto $0$ e \constd{TFD\_TIMER\_ABSTIME}
 (l'analogo di \const{TIMER\_ABSTIME}).
 
 L'ultima funzione di sistema prevista dalla nuova interfaccia è
@@ -2623,9 +2623,8 @@ contesto le modalità di accesso ai file eseguibili in maniera
 \textsl{asincrona}, quelle cioè in cui un processo non deve bloccarsi in
 attesa della disponibilità dell'accesso al file, ma può proseguire
 nell'esecuzione utilizzando invece un meccanismo di notifica asincrono (di
-norma un segnale, ma esistono anche altre interfacce, come \itindex{inotify}
-\textit{inotify}), per essere avvisato della possibilità di eseguire le
-operazioni di I/O volute.
+norma un segnale, ma esistono anche altre interfacce, come \textit{inotify}),
+per essere avvisato della possibilità di eseguire le operazioni di I/O volute.
 
 
 \subsection{Il \textit{Signal driven I/O}}
@@ -2814,9 +2813,9 @@ tab.~\ref{tab:file_lease_fctnl}.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{F\_RDLCK} & Richiede un \textit{read lease}.\\
-    \const{F\_WRLCK} & Richiede un \textit{write lease}.\\
-    \const{F\_UNLCK} & Rilascia un \textit{file lease}.\\
+    \consts{F\_RDLCK} & Richiede un \textit{read lease}.\\
+    \consts{F\_WRLCK} & Richiede un \textit{write lease}.\\
+    \consts{F\_UNLCK} & Rilascia un \textit{file lease}.\\
     \hline    
   \end{tabular}
   \caption{Costanti per i tre possibili valori dell'argomento \param{arg} di
@@ -2914,26 +2913,26 @@ che è stato modificato tramite il contenuto della struttura
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{DN\_ACCESS} & Un file è stato acceduto, con l'esecuzione di una fra
-                         \func{read}, \func{pread}, \func{readv}.\\ 
-    \const{DN\_MODIFY} & Un file è stato modificato, con l'esecuzione di una
-                         fra \func{write}, \func{pwrite}, \func{writev}, 
-                         \func{truncate}, \func{ftruncate}.\\ 
-    \const{DN\_CREATE} & È stato creato un file nella directory, con
-                         l'esecuzione di una fra \func{open}, \func{creat},
-                         \func{mknod}, \func{mkdir}, \func{link},
-                         \func{symlink}, \func{rename} (da un'altra
-                         directory).\\
-    \const{DN\_DELETE} & È stato cancellato un file dalla directory con
-                         l'esecuzione di una fra \func{unlink}, \func{rename}
-                         (su un'altra directory), \func{rmdir}.\\
-    \const{DN\_RENAME} & È stato rinominato un file all'interno della
-                         directory (con \func{rename}).\\
-    \const{DN\_ATTRIB} & È stato modificato un attributo di un file con
-                         l'esecuzione di una fra \func{chown}, \func{chmod},
-                         \func{utime}.\\ 
-    \const{DN\_MULTISHOT}& Richiede una notifica permanente di tutti gli
-                         eventi.\\ 
+    \constd{DN\_ACCESS} & Un file è stato acceduto, con l'esecuzione di una fra
+                          \func{read}, \func{pread}, \func{readv}.\\ 
+    \constd{DN\_MODIFY} & Un file è stato modificato, con l'esecuzione di una
+                          fra \func{write}, \func{pwrite}, \func{writev}, 
+                          \func{truncate}, \func{ftruncate}.\\ 
+    \constd{DN\_CREATE} & È stato creato un file nella directory, con
+                          l'esecuzione di una fra \func{open}, \func{creat},
+                          \func{mknod}, \func{mkdir}, \func{link},
+                          \func{symlink}, \func{rename} (da un'altra
+                          directory).\\
+    \constd{DN\_DELETE} & È stato cancellato un file dalla directory con
+                          l'esecuzione di una fra \func{unlink}, \func{rename}
+                          (su un'altra directory), \func{rmdir}.\\
+    \constd{DN\_RENAME} & È stato rinominato un file all'interno della
+                          directory (con \func{rename}).\\
+    \constd{DN\_ATTRIB} & È stato modificato un attributo di un file con
+                          l'esecuzione di una fra \func{chown}, \func{chmod},
+                          \func{utime}.\\ 
+    \constd{DN\_MULTISHOT}& Richiede una notifica permanente di tutti gli
+                            eventi.\\ 
     \hline    
   \end{tabular}
   \caption{Le costanti che identificano le varie classi di eventi per i quali
@@ -2989,9 +2988,8 @@ interfaccia per l'osservazione delle modifiche a file o directory, chiamata
 questa è una interfaccia specifica di Linux (pertanto non deve essere usata se
 si devono scrivere programmi portabili), ed è basata sull'uso di una coda di
 notifica degli eventi associata ad un singolo file descriptor, il che permette
-di risolvere il principale problema di \itindex{dnotify} \textit{dnotify}.  La
-coda viene creata attraverso la funzione di sistema \funcd{inotify\_init}, il
-cui prototipo è:
+di risolvere il principale problema di \textit{dnotify}.  La coda viene creata
+attraverso la funzione di sistema \funcd{inotify\_init}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{sys/inotify.h}
@@ -3102,41 +3100,41 @@ flag della prima parte.
     \textbf{Valore}  & & \textbf{Significato} \\
     \hline
     \hline
-    \const{IN\_ACCESS}        &$\bullet$& C'è stato accesso al file in
-                                          lettura.\\  
-    \const{IN\_ATTRIB}        &$\bullet$& Ci sono stati cambiamenti sui dati
-                                          dell'\textit{inode}
-                                          (o sugli attributi estesi, vedi
-                                          sez.~\ref{sec:file_xattr}).\\ 
-    \const{IN\_CLOSE\_WRITE}  &$\bullet$& È stato chiuso un file aperto in
-                                          scrittura.\\  
-    \const{IN\_CLOSE\_NOWRITE}&$\bullet$& È stato chiuso un file aperto in
-                                          sola lettura.\\
-    \const{IN\_CREATE}        &$\bullet$& È stato creato un file o una
-                                          directory in una directory sotto
-                                          osservazione.\\  
-    \const{IN\_DELETE}        &$\bullet$& È stato cancellato un file o una
-                                          directory in una directory sotto
-                                          osservazione.\\ 
-    \const{IN\_DELETE\_SELF}  & --      & È stato cancellato il file (o la
+    \constd{IN\_ACCESS}        &$\bullet$& C'è stato accesso al file in
+                                           lettura.\\  
+    \constd{IN\_ATTRIB}        &$\bullet$& Ci sono stati cambiamenti sui dati
+                                           dell'\textit{inode}
+                                           (o sugli attributi estesi, vedi
+                                           sez.~\ref{sec:file_xattr}).\\ 
+    \constd{IN\_CLOSE\_WRITE}  &$\bullet$& È stato chiuso un file aperto in
+                                           scrittura.\\  
+    \constd{IN\_CLOSE\_NOWRITE}&$\bullet$& È stato chiuso un file aperto in
+                                           sola lettura.\\
+    \constd{IN\_CREATE}        &$\bullet$& È stato creato un file o una
+                                           directory in una directory sotto
+                                           osservazione.\\  
+    \constd{IN\_DELETE}        &$\bullet$& È stato cancellato un file o una
+                                           directory in una directory sotto
+                                           osservazione.\\ 
+    \constd{IN\_DELETE\_SELF}  & --      & È stato cancellato il file (o la
                                           directory) sotto osservazione.\\ 
-    \const{IN\_MODIFY}        &$\bullet$& È stato modificato il file.\\ 
-    \const{IN\_MOVE\_SELF}    &         & È stato rinominato il file (o la
-                                          directory) sotto osservazione.\\ 
-    \const{IN\_MOVED\_FROM}   &$\bullet$& Un file è stato spostato fuori dalla
-                                          directory sotto osservazione.\\ 
-    \const{IN\_MOVED\_TO}     &$\bullet$& Un file è stato spostato nella
-                                          directory sotto osservazione.\\ 
-    \const{IN\_OPEN}          &$\bullet$& Un file è stato aperto.\\ 
+    \constd{IN\_MODIFY}        &$\bullet$& È stato modificato il file.\\ 
+    \constd{IN\_MOVE\_SELF}    &         & È stato rinominato il file (o la
+                                           directory) sotto osservazione.\\ 
+    \constd{IN\_MOVED\_FROM}   &$\bullet$& Un file è stato spostato fuori dalla
+                                           directory sotto osservazione.\\ 
+    \constd{IN\_MOVED\_TO}     &$\bullet$& Un file è stato spostato nella
+                                           directory sotto osservazione.\\ 
+    \constd{IN\_OPEN}          &$\bullet$& Un file è stato aperto.\\ 
     \hline    
-    \const{IN\_CLOSE}         &         & Combinazione di
-                                          \const{IN\_CLOSE\_WRITE} e
-                                          \const{IN\_CLOSE\_NOWRITE}.\\  
-    \const{IN\_MOVE}          &         & Combinazione di
-                                          \const{IN\_MOVED\_FROM} e
-                                          \const{IN\_MOVED\_TO}.\\
-    \const{IN\_ALL\_EVENTS}   &         & Combinazione di tutti i flag
-                                          possibili.\\
+    \constd{IN\_CLOSE}         &         & Combinazione di
+                                           \const{IN\_CLOSE\_WRITE} e
+                                           \const{IN\_CLOSE\_NOWRITE}.\\  
+    \constd{IN\_MOVE}          &         & Combinazione di
+                                           \const{IN\_MOVED\_FROM} e
+                                           \const{IN\_MOVED\_TO}.\\
+    \constd{IN\_ALL\_EVENTS}   &         & Combinazione di tutti i flag
+                                           possibili.\\
     \hline    
   \end{tabular}
   \caption{Le costanti che identificano i bit della maschera binaria
@@ -3163,17 +3161,17 @@ contrario dei precedenti non vengono mai impostati nei risultati in uscita.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{IN\_DONT\_FOLLOW}& Non dereferenzia \param{pathname} se questo è un
-                              link simbolico.\\
-    \const{IN\_MASK\_ADD}   & Aggiunge a quelli già impostati i flag indicati
-                              nell'argomento \param{mask}, invece di
-                              sovrascriverli.\\
-    \const{IN\_ONESHOT}     & Esegue l'osservazione su \param{pathname} per una
-                              sola volta, rimuovendolo poi dalla \textit{watch
-                                list}.\\ 
-    \const{IN\_ONLYDIR}     & Se \param{pathname} è una directory riporta
-                              soltanto gli eventi ad essa relativi e non
-                              quelli per i file che contiene.\\ 
+    \constd{IN\_DONT\_FOLLOW}& Non dereferenzia \param{pathname} se questo è un
+                               link simbolico.\\
+    \constd{IN\_MASK\_ADD}   & Aggiunge a quelli già impostati i flag indicati
+                               nell'argomento \param{mask}, invece di
+                               sovrascriverli.\\
+    \constd{IN\_ONESHOT}     & Esegue l'osservazione su \param{pathname} per
+                               una sola volta, rimuovendolo poi dalla
+                               \textit{watch list}.\\ 
+    \constd{IN\_ONLYDIR}     & Se \param{pathname} è una directory riporta
+                               soltanto gli eventi ad essa relativi e non
+                               quelli per i file che contiene.\\ 
     \hline    
   \end{tabular}
   \caption{Le costanti che identificano i bit della maschera binaria
@@ -3295,21 +3293,21 @@ registrazione dell'osservatore).
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{IN\_IGNORED}    & L'osservatore è stato rimosso, sia in maniera 
-                             esplicita con l'uso di \func{inotify\_rm\_watch}, 
-                             che in maniera implicita per la rimozione 
-                             dell'oggetto osservato o per lo smontaggio del
-                             filesystem su cui questo si trova.\\
-    \const{IN\_ISDIR}      & L'evento avvenuto fa riferimento ad una directory
-                             (consente così di distinguere, quando si pone
-                             sotto osservazione una directory, fra gli eventi
-                             relativi ad essa e quelli relativi ai file che
-                             essa contiene).\\
-    \const{IN\_Q\_OVERFLOW}& Si sono eccedute le dimensioni della coda degli
-                             eventi (\textit{overflow} della coda); in questo
-                             caso il valore di \var{wd} è $-1$.\footnotemark\\
-    \const{IN\_UNMOUNT}    & Il filesystem contenente l'oggetto posto sotto
-                             osservazione è stato smontato.\\
+    \constd{IN\_IGNORED}    & L'osservatore è stato rimosso, sia in maniera 
+                              esplicita con l'uso di \func{inotify\_rm\_watch}, 
+                              che in maniera implicita per la rimozione 
+                              dell'oggetto osservato o per lo smontaggio del
+                              filesystem su cui questo si trova.\\
+    \constd{IN\_ISDIR}      & L'evento avvenuto fa riferimento ad una directory
+                              (consente così di distinguere, quando si pone
+                              sotto osservazione una directory, fra gli eventi
+                              relativi ad essa e quelli relativi ai file che
+                              essa contiene).\\
+    \constd{IN\_Q\_OVERFLOW}& Si sono eccedute le dimensioni della coda degli
+                              eventi (\textit{overflow} della coda); in questo
+                              caso il valore di \var{wd} è $-1$.\footnotemark\\
+    \constd{IN\_UNMOUNT}    & Il filesystem contenente l'oggetto posto sotto
+                              osservazione è stato smontato.\\
     \hline    
   \end{tabular}
   \caption{Le costanti che identificano i bit aggiuntivi usati nella maschera
@@ -3491,14 +3489,14 @@ poter effettuare in contemporanea le operazioni di calcolo e quelle di I/O.
 Benché la modalità di apertura asincrona di un file vista in
 sez.~\ref{sec:signal_driven_io} possa risultare utile in varie occasioni (in
 particolar modo con i socket e gli altri file per i quali le funzioni di I/O
-sono \index{system~call~lente} \textit{system call} lente), essa è comunque
-limitata alla notifica della disponibilità del file descriptor per le
-operazioni di I/O, e non ad uno svolgimento asincrono delle medesime.  Lo
-standard POSIX.1b definisce una interfaccia apposita per l'I/O asincrono vero
-e proprio,\footnote{questa è stata ulteriormente perfezionata nelle successive
-  versioni POSIX.1-2001 e POSIX.1-2008.} che prevede un insieme di funzioni
-dedicate per la lettura e la scrittura dei file, completamente separate
-rispetto a quelle usate normalmente.
+sono \textit{system call} lente), essa è comunque limitata alla notifica della
+disponibilità del file descriptor per le operazioni di I/O, e non ad uno
+svolgimento asincrono delle medesime.  Lo standard POSIX.1b definisce una
+interfaccia apposita per l'I/O asincrono vero e proprio,\footnote{questa è
+  stata ulteriormente perfezionata nelle successive versioni POSIX.1-2001 e
+  POSIX.1-2008.} che prevede un insieme di funzioni dedicate per la lettura e
+la scrittura dei file, completamente separate rispetto a quelle usate
+normalmente.
 
 In generale questa interfaccia è completamente astratta e può essere
 implementata sia direttamente nel kernel che in \textit{user space} attraverso
@@ -3740,13 +3738,13 @@ file descriptor diverso da \param{fd} il risultato è indeterminato.  In caso
 di successo, i possibili valori di ritorno per \func{aio\_cancel} (anch'essi
 definiti in \headfile{aio.h}) sono tre:
 \begin{basedescript}{\desclabelwidth{3.0cm}}
-\item[\const{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la
+\item[\constd{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la
   cancellazione sono state già completate,
   
-\item[\const{AIO\_CANCELED}] indica che tutte le operazioni richieste sono
+\item[\constd{AIO\_CANCELED}] indica che tutte le operazioni richieste sono
   state cancellate,  
   
-\item[\const{AIO\_NOTCANCELED}] indica che alcune delle operazioni erano in
+\item[\constd{AIO\_NOTCANCELED}] indica che alcune delle operazioni erano in
   corso e non sono state cancellate.
 \end{basedescript}
 
@@ -3834,9 +3832,9 @@ Ciascuna struttura \struct{aiocb} della lista deve contenere un
 ognuna di esse dovrà essere specificato il tipo di operazione con il campo
 \var{aio\_lio\_opcode}, che può prendere i valori:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{LIO\_READ}]  si richiede una operazione di lettura.
-\item[\const{LIO\_WRITE}] si richiede una operazione di scrittura.
-na operazione.
+\item[\constd{LIO\_READ}]  si richiede una operazione di lettura.
+\item[\constd{LIO\_WRITE}] si richiede una operazione di scrittura.
+\item[\constd{LIO\_NOP}] non si effettua nessuna operazione.
 \end{basedescript}
 dove \const{LIO\_NOP} viene usato quando si ha a che fare con un vettore di
 dimensione fissa, per poter specificare solo alcune operazioni, o quando si
@@ -3844,8 +3842,8 @@ sono dovute cancellare delle operazioni e si deve ripetere la richiesta per
 quelle non completate. 
 
 L'argomento \param{mode} controlla il comportamento della funzione, se viene
-usato il valore \const{LIO\_WAIT} la funzione si blocca fino al completamento
-di tutte le operazioni richieste; se si usa \const{LIO\_NOWAIT} la funzione
+usato il valore \constd{LIO\_WAIT} la funzione si blocca fino al completamento
+di tutte le operazioni richieste; se si usa \constd{LIO\_NOWAIT} la funzione
 ritorna immediatamente dopo aver messo in coda tutte le richieste. In tal caso
 il chiamante può richiedere la notifica del completamento di tutte le
 richieste, impostando l'argomento \param{sig} in maniera analoga a come si fa
@@ -3990,10 +3988,10 @@ memoria.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{PROT\_EXEC}  & Le pagine possono essere eseguite.\\
-    \const{PROT\_READ}  & Le pagine possono essere lette.\\
-    \const{PROT\_WRITE} & Le pagine possono essere scritte.\\
-    \const{PROT\_NONE}  & L'accesso alle pagine è vietato.\\
+    \constd{PROT\_EXEC}  & Le pagine possono essere eseguite.\\
+    \constd{PROT\_READ}  & Le pagine possono essere lette.\\
+    \constd{PROT\_WRITE} & Le pagine possono essere scritte.\\
+    \constd{PROT\_NONE}  & L'accesso alle pagine è vietato.\\
     \hline    
   \end{tabular}
   \caption{Valori dell'argomento \param{prot} di \func{mmap}, relativi alla
@@ -4022,53 +4020,53 @@ file.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{MAP\_32BIT}     & Esegue la mappatura sui primi 2Gb dello spazio
+    \constd{MAP\_32BIT}    & Esegue la mappatura sui primi 2Gb dello spazio
                              degli indirizzi, viene supportato solo sulle
                              piattaforme \texttt{x86-64} per compatibilità con
                              le applicazioni a 32 bit. Viene ignorato se si è
                              richiesto \const{MAP\_FIXED} (dal kernel 2.4.20).\\
-    \const{MAP\_ANON}      & Sinonimo di \const{MAP\_ANONYMOUS}, deprecato.\\
-    \const{MAP\_ANONYMOUS} & La mappatura non è associata a nessun file. Gli
+    \constd{MAP\_ANON}     & Sinonimo di \const{MAP\_ANONYMOUS}, deprecato.\\
+    \constd{MAP\_ANONYMOUS}& La mappatura non è associata a nessun file. Gli
                              argomenti \param{fd} e \param{offset} sono
                              ignorati. L'uso di questo flag con
                              \const{MAP\_SHARED} è stato implementato in Linux
                              a partire dai kernel della serie 2.4.x.\\
-    \const{MAP\_DENYWRITE} & In Linux viene ignorato per evitare
+    \constd{MAP\_DENYWRITE}& In Linux viene ignorato per evitare
                              \textit{DoS}
                              (veniva usato per segnalare che tentativi di
                              scrittura sul file dovevano fallire con
                              \errcode{ETXTBSY}).\\ 
-    \const{MAP\_EXECUTABLE}& Ignorato.\\
-    \const{MAP\_FILE}      & Valore di compatibilità, ignorato.\\
-    \const{MAP\_FIXED}     & Non permette di restituire un indirizzo diverso
+    \constd{MAP\_EXECUTABLE}& Ignorato.\\
+    \constd{MAP\_FILE}     & Valore di compatibilità, ignorato.\\
+    \constd{MAP\_FIXED}    & Non permette di restituire un indirizzo diverso
                              da \param{start}, se questo non può essere usato
                              \func{mmap} fallisce. Se si imposta questo flag il
                              valore di \param{start} deve essere allineato
                              alle dimensioni di una pagina.\\
-    \const{MAP\_GROWSDOWN} & Usato per gli \textit{stack}. 
+    \constd{MAP\_GROWSDOWN}& Usato per gli \textit{stack}. 
                              Indica che la mappatura deve essere effettuata 
                              con gli indirizzi crescenti verso il basso.\\
-    \const{MAP\_HUGETLB}   & Esegue la mappatura usando le cosiddette
+    \constd{MAP\_HUGETLB}  & Esegue la mappatura usando le cosiddette
                              ``\textit{huge pages}'' (dal kernel 2.6.32).\\
-    \const{MAP\_LOCKED}    & Se impostato impedisce lo \textit{swapping} delle
+    \constd{MAP\_LOCKED}   & Se impostato impedisce lo \textit{swapping} delle
                              pagine mappate (dal kernel 2.5.37).\\
-    \const{MAP\_NONBLOCK}  & Esegue un \textit{prefaulting} più limitato che
+    \constd{MAP\_NONBLOCK} & Esegue un \textit{prefaulting} più limitato che
                              non causa I/O (dal kernel 2.5.46).\\
-    \const{MAP\_NORESERVE} & Si usa con \const{MAP\_PRIVATE}. Non riserva
+    \constd{MAP\_NORESERVE}& Si usa con \const{MAP\_PRIVATE}. Non riserva
                              delle pagine di \textit{swap} ad uso del meccanismo
                              del \textit{copy on write} 
                              per mantenere le modifiche fatte alla regione
                              mappata, in questo caso dopo una scrittura, se
                              non c'è più memoria disponibile, si ha
                              l'emissione di un \signal{SIGSEGV}.\\
-    \const{MAP\_POPULATE}  & Esegue il \textit{prefaulting} delle pagine di
+    \constd{MAP\_POPULATE} & Esegue il \textit{prefaulting} delle pagine di
                              memoria necessarie alla mappatura (dal kernel
                              2.5.46).\\ 
-    \const{MAP\_PRIVATE}   & I cambiamenti sulla memoria mappata non vengono
+    \constd{MAP\_PRIVATE}  & I cambiamenti sulla memoria mappata non vengono
                              riportati sul file. Ne viene fatta una copia
                              privata cui solo il processo chiamante ha
                              accesso.  Incompatibile con \const{MAP\_SHARED}.\\
-    \const{MAP\_SHARED}    & I cambiamenti sulla memoria mappata vengono
+    \constd{MAP\_SHARED}   & I cambiamenti sulla memoria mappata vengono
                              riportati sul file e saranno immediatamente
                              visibili agli altri processi che mappano lo stesso
                              file. Incompatibile
@@ -4079,7 +4077,7 @@ file.
                              uno spazio utilizzabile come \textit{stack} per le
                              architetture hardware che richiedono un
                              trattamento speciale di quest'ultimo.\\
-    \const{MAP\_UNINITIALIZED}& Specifico per i sistemi embedded ed
+    \constd{MAP\_UNINITIALIZED}& Specifico per i sistemi embedded ed
                              utilizzabile dal kernel 2.6.33 solo se è stata
                              abilitata in fase di compilazione dello stesso
                              l'opzione
@@ -4093,7 +4091,7 @@ file.
                              per i sistemi embedded) si ha il completo
                              controllo dell'uso della memoria da parte degli
                              utenti.\\ 
-%     \const{MAP\_DONTEXPAND}& Non consente una successiva espansione dell'area
+%    \constd{MAP\_DONTEXPAND}& Non consente una successiva espansione dell'area
 %                              mappata con \func{mremap}, proposto ma pare non
 %                              implementato.\\
     \hline
@@ -4275,7 +4273,6 @@ relativi tempi di modifica. In questo modo si è sicuri che dopo l'esecuzione
 di \func{msync} le funzioni dell'interfaccia ordinaria troveranno un contenuto
 del file aggiornato.
 
-
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -4284,11 +4281,11 @@ del file aggiornato.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{MS\_SYNC}       & richiede una sincronizzazione e ritorna soltanto
+    \constd{MS\_SYNC}      & richiede una sincronizzazione e ritorna soltanto
                              quando questa è stata completata.\\
-    \const{MS\_ASYNC}      & richiede una sincronizzazione, ma ritorna subito 
+    \constd{MS\_ASYNC}     & richiede una sincronizzazione, ma ritorna subito 
                              non attendendo che questa sia finita.\\
-    \const{MS\_INVALIDATE} & invalida le pagine per tutte le mappature
+    \constd{MS\_INVALIDATE}& invalida le pagine per tutte le mappature
                              in memoria così da rendere necessaria una
                              rilettura immediata delle stesse.\\
     \hline
@@ -4410,7 +4407,7 @@ precedente indirizzo del \textit{memory mapping} e \param{old\_size}, che ne
 indica la dimensione. Con \param{new\_size} si specifica invece la nuova
 dimensione che si vuole ottenere. Infine l'argomento \param{flags} è una
 maschera binaria per i flag che controllano il comportamento della funzione.
-Il solo valore utilizzato è \const{MREMAP\_MAYMOVE} che consente di eseguire
+Il solo valore utilizzato è \constd{MREMAP\_MAYMOVE} che consente di eseguire
 l'espansione anche quando non è possibile utilizzare il precedente
 indirizzo. Per questo motivo, se si è usato questo flag, la funzione può
 restituire un indirizzo della nuova zona di memoria che non è detto coincida
@@ -4600,82 +4597,83 @@ caching dei dati.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{MADV\_DONTNEED}& non ci si aspetta nessun accesso nell'immediato
-                            futuro, pertanto le pagine possono essere
-                            liberate dal kernel non appena necessario; l'area
-                            di memoria resterà accessibile, ma un accesso
-                            richiederà che i dati vengano ricaricati dal file
-                            a cui la mappatura fa riferimento.\\
-    \const{MADV\_NORMAL}  & nessuna indicazione specifica, questo è il valore
-                            di default usato quando non si è chiamato
-                            \func{madvise}.\\
-    \const{MADV\_RANDOM}  & ci si aspetta un accesso casuale all'area
-                            indicata, pertanto l'applicazione di una lettura
-                            anticipata con il meccanismo del
-                            \textit{read-ahead} (vedi 
-                            sez.~\ref{sec:file_fadvise}) è di
-                            scarsa utilità e verrà disabilitata.\\
-    \const{MADV\_SEQUENTIAL}& ci si aspetta un accesso sequenziale al file,
-                            quindi da una parte sarà opportuno eseguire una
-                            lettura anticipata, e dall'altra si potranno
-                            scartare immediatamente le pagine una volta che
-                            queste siano state lette.\\
+    \constd{MADV\_DONTNEED}& non ci si aspetta nessun accesso nell'immediato
+                             futuro, pertanto le pagine possono essere
+                             liberate dal kernel non appena necessario; l'area
+                             di memoria resterà accessibile, ma un accesso
+                             richiederà che i dati vengano ricaricati dal file
+                             a cui la mappatura fa riferimento.\\
+    \constd{MADV\_NORMAL}  & nessuna indicazione specifica, questo è il valore
+                             di default usato quando non si è chiamato
+                             \func{madvise}.\\
+    \constd{MADV\_RANDOM}  & ci si aspetta un accesso casuale all'area
+                             indicata, pertanto l'applicazione di una lettura
+                             anticipata con il meccanismo del
+                             \textit{read-ahead} (vedi 
+                             sez.~\ref{sec:file_fadvise}) è di
+                             scarsa utilità e verrà disabilitata.\\
+    \constd{MADV\_SEQUENTIAL}& ci si aspetta un accesso sequenziale al file,
+                               quindi da una parte sarà opportuno eseguire una
+                               lettura anticipata, e dall'altra si potranno
+                               scartare immediatamente le pagine una volta che
+                               queste siano state lette.\\
     \const{MADV\_WILLNEED}& ci si aspetta un accesso nell'immediato futuro,
                             pertanto l'applicazione del \textit{read-ahead}
                             deve essere incentivata.\\
     \hline
-    \const{MADV\_DONTDUMP}& esclude da un \textit{core dump} (vedi
-                            sez.~\ref{sec:sig_standard}) le pagine 
-                            specificate, viene usato per evitare di scrivere
-                            su disco dati relativi a zone di memoria che si sa
-                            non essere utili in un \textit{core dump}.\\
-    \const{MADV\_DODUMP}  & rimuove l'effetto della precedente
-                            \const{MADV\_DONTDUMP} (dal kernel 3.4).\\ 
-    \const{MADV\_DONTFORK}& impedisce che l'intervallo specificato venga
-                            ereditato dal processo figlio dopo una
-                            \func{fork}; questo consente di evitare che il
-                            meccanismo del \textit{copy on write} effettui la
-                            rilocazione delle pagine quando il padre scrive
-                            sull'area di memoria dopo la \func{fork}, cosa che
-                            può causare problemi per l'hardware che esegue
-                            operazioni in DMA su quelle pagine (dal kernel
-                            2.6.16).\\
-    \const{MADV\_DOFORK}  & rimuove l'effetto della precedente
-                            \const{MADV\_DONTFORK} (dal kernel 2.6.16).\\ 
-    \const{MADV\_HUGEPAGE}& abilita il meccanismo delle \textit{Transparent
-                              Huge Page} (vedi sez.~\ref{sec:huge_pages})
-                            sulla regione indicata; se questa è allineata
-                            alle relative dimensioni il kernel alloca
-                            direttamente delle \textit{huge page}; è
-                            utilizzabile solo con mappature anomime private
-                            (dal kernel 2.6.38).\\
-    \const{MADV\_NOHUGEPAGE}& impedisce che la regione indicata venga
-                            collassata in eventuali \textit{huge page} (dal
-                            kernel 2.6.38).\\
-    \const{MADV\_HWPOISON} &opzione ad uso di debug per verificare codice
-                            che debba gestire errori nella gestione della
-                            memoria; richiede una apposita opzione di
-                            compilazione del kernel, privilegi amministrativi
-                            (la capacità \const{CAP\_SYS\_ADMIN}) e provoca
-                            l'emissione di un segnale di \const{SIGBUS} dal
-                            programma chiamante e rimozione della mappatura
-                            (dal kernel 2.6.32).\\
-    \const{MADV\_SOFT\_OFFLINE}&opzione utilizzata per il debug del
-                            codice di verifica degli errori di gestione
-                            memoria, richiede una apposita opzione di
-                            compilazione (dal kernel 2.6.33).\\
-    \const{MADV\_MERGEABLE}& marca la pagina come accorpabile, indicazione
-                            principalmente ad uso dei sistemi di
-                            virtualizzazione\footnotemark (dal kernel 2.6.32).\\
-    \const{MADV\_REMOVE}  & libera un intervallo di pagine di memoria ed il
-                            relativo supporto sottostante; è supportato
-                            soltanto sui filesystem in RAM \textit{tmpfs} e
-                            \textit{shmfs} se usato su altri tipi di
-                            filesystem causa un errore di \errcode{ENOSYS}
-                            (dal kernel 2.6.16).\\
-    \const{MADV\_UNMERGEABLE}& rimuove l'effetto della precedente
-                            \const{MADV\_MERGEABLE} (dal kernel 2.6.32). \\
-     \hline
+    \constd{MADV\_DONTDUMP}& esclude da un \textit{core dump} (vedi
+                             sez.~\ref{sec:sig_standard}) le pagine 
+                             specificate, viene usato per evitare di scrivere
+                             su disco dati relativi a zone di memoria che si sa
+                             non essere utili in un \textit{core dump}.\\
+    \constd{MADV\_DODUMP}  & rimuove l'effetto della precedente
+                             \const{MADV\_DONTDUMP} (dal kernel 3.4).\\ 
+    \constd{MADV\_DONTFORK}& impedisce che l'intervallo specificato venga
+                             ereditato dal processo figlio dopo una
+                             \func{fork}; questo consente di evitare che il
+                             meccanismo del \textit{copy on write} effettui la
+                             rilocazione delle pagine quando il padre scrive
+                             sull'area di memoria dopo la \func{fork}, cosa che
+                             può causare problemi per l'hardware che esegue
+                             operazioni in DMA su quelle pagine (dal kernel
+                             2.6.16).\\
+    \constd{MADV\_DOFORK}  & rimuove l'effetto della precedente
+                             \const{MADV\_DONTFORK} (dal kernel 2.6.16).\\ 
+    \constd{MADV\_HUGEPAGE}& abilita il meccanismo delle \textit{Transparent
+                             Huge Page} (vedi sez.~\ref{sec:huge_pages})
+                             sulla regione indicata; se questa è allineata
+                             alle relative dimensioni il kernel alloca
+                             direttamente delle \textit{huge page}; è
+                             utilizzabile solo con mappature anomime private
+                             (dal kernel 2.6.38).\\
+    \constd{MADV\_NOHUGEPAGE}& impedisce che la regione indicata venga
+                               collassata in eventuali \textit{huge page} (dal
+                               kernel 2.6.38).\\
+    \constd{MADV\_HWPOISON} &opzione ad uso di debug per verificare codice
+                              che debba gestire errori nella gestione della
+                              memoria; richiede una apposita opzione di
+                              compilazione del kernel, privilegi amministrativi
+                              (la capacità \const{CAP\_SYS\_ADMIN}) e provoca
+                              l'emissione di un segnale di \const{SIGBUS} dal
+                              programma chiamante e rimozione della mappatura
+                              (dal kernel 2.6.32).\\
+    \constd{MADV\_SOFT\_OFFLINE}&opzione utilizzata per il debug del
+                              codice di verifica degli errori di gestione
+                              memoria, richiede una apposita opzione di
+                              compilazione (dal kernel 2.6.33).\\
+    \constd{MADV\_MERGEABLE}& marca la pagina come accorpabile, indicazione
+                              principalmente ad uso dei sistemi di
+                              virtualizzazione\footnotemark (dal kernel
+                              2.6.32).\\ 
+    \constd{MADV\_REMOVE}  & libera un intervallo di pagine di memoria ed il
+                             relativo supporto sottostante; è supportato
+                             soltanto sui filesystem in RAM \textit{tmpfs} e
+                             \textit{shmfs} se usato su altri tipi di
+                             filesystem causa un errore di \errcode{ENOSYS}
+                             (dal kernel 2.6.16).\\
+    \constd{MADV\_UNMERGEABLE}& rimuove l'effetto della precedente
+                                \const{MADV\_MERGEABLE} (dal kernel 2.6.32). \\
+    \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{advice} di \func{madvise}.}
   \label{tab:madvise_advice_values}
@@ -4736,11 +4734,11 @@ funzione, su Linux un valore nullo di \param{len} è consentito.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{POSIX\_MADV\_DONTNEED}& analogo a \const{MADV\_DONTNEED}.\\
-    \const{POSIX\_MADV\_NORMAL}  & identico a \const{MADV\_NORMAL}.\\
-    \const{POSIX\_MADV\_RANDOM}  & identico a \const{MADV\_RANDOM}.\\
-    \const{POSIX\_MADV\_SEQUENTIAL}& identico a \const{MADV\_SEQUENTIAL}.\\
-    \const{POSIX\_MADV\_WILLNEED}& identico a \const{MADV\_WILLNEED}.\\
+    \constd{POSIX\_MADV\_DONTNEED}& analogo a \const{MADV\_DONTNEED}.\\
+    \constd{POSIX\_MADV\_NORMAL}  & identico a \const{MADV\_NORMAL}.\\
+    \constd{POSIX\_MADV\_RANDOM}  & identico a \const{MADV\_RANDOM}.\\
+    \constd{POSIX\_MADV\_SEQUENTIAL}& identico a \const{MADV\_SEQUENTIAL}.\\
+    \constd{POSIX\_MADV\_WILLNEED}& identico a \const{MADV\_WILLNEED}.\\
      \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{advice} di \func{posix\_madvise}.}
@@ -5136,55 +5134,55 @@ descrizioni complete di tutti i valori possibili anche quando, come per
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{SPLICE\_F\_MOVE}    & Suggerisce al kernel di spostare le pagine
-                                 di memoria contenenti i dati invece di
-                                 copiarle: per una maggiore efficienza
-                                 \func{splice} usa quando possibile i
-                                 meccanismi della memoria virtuale per
-                                 eseguire i trasferimenti di dati. In maniera
-                                 analoga a \func{mmap}), qualora le pagine non
-                                 possano essere spostate dalla \textit{pipe} o
-                                 il buffer non corrisponda a pagine intere
-                                 esse saranno comunque copiate. Viene usato
-                                 soltanto da \func{splice}.\\ 
-    \const{SPLICE\_F\_NONBLOCK}& Richiede di operare in modalità non
-                                 bloccante; questo flag influisce solo sulle
-                                 operazioni che riguardano l'I/O da e verso la
-                                 \textit{pipe}. Nel caso di \func{splice}
-                                 questo significa che la funzione potrà
-                                 comunque bloccarsi nell'accesso agli altri
-                                 file descriptor (a meno che anch'essi non
-                                 siano stati aperti in modalità non
-                                 bloccante).\\
-    \const{SPLICE\_F\_MORE}    & Indica al kernel che ci sarà l'invio di
-                                 ulteriori dati in una \func{splice}
-                                 successiva, questo è un suggerimento utile
-                                 che viene usato quando \param{fd\_out} è un
-                                 socket. Questa opzione consente di utilizzare
-                                 delle opzioni di gestione dei socket che
-                                 permettono di ottimizzare le trasmissioni via
-                                 rete (si veda la descrizione di
-                                 \const{TCP\_CORK} in
-                                 sez.~\ref{sec:sock_tcp_udp_options} e quella
-                                 di \const{MSG\_MORE} in
-                                 sez.~\ref{sec:net_sendmsg}).  Attualmente
-                                 viene usato solo da \func{splice}, potrà essere
-                                 implementato in futuro anche per
-                                 \func{vmsplice} e \func{tee}.\\
-    \const{SPLICE\_F\_GIFT}    & Le pagine di memoria utente sono
-                                 ``\textsl{donate}'' al kernel; questo
-                                 significa che la cache delle pagine e i dati
-                                 su disco potranno differire, e che
-                                 l'applicazione non potrà modificare
-                                 quest'area di memoria. 
-                                 Se impostato una seguente \func{splice} che
-                                 usa \const{SPLICE\_F\_MOVE} potrà spostare le 
-                                 pagine con successo, altrimenti esse dovranno
-                                 essere copiate; per usare questa opzione i
-                                 dati dovranno essere opportunamente allineati
-                                 in posizione ed in dimensione alle pagine di
-                                 memoria. Viene usato soltanto da
-                                 \func{vmsplice}.\\
+    \constd{SPLICE\_F\_MOVE} & Suggerisce al kernel di spostare le pagine
+                               di memoria contenenti i dati invece di
+                               copiarle: per una maggiore efficienza
+                               \func{splice} usa quando possibile i
+                               meccanismi della memoria virtuale per
+                               eseguire i trasferimenti di dati. In maniera
+                               analoga a \func{mmap}), qualora le pagine non
+                               possano essere spostate dalla \textit{pipe} o
+                               il buffer non corrisponda a pagine intere
+                               esse saranno comunque copiate. Viene usato
+                               soltanto da \func{splice}.\\ 
+    \constd{SPLICE\_F\_NONBLOCK}& Richiede di operare in modalità non
+                                  bloccante; questo flag influisce solo sulle
+                                  operazioni che riguardano l'I/O da e verso la
+                                  \textit{pipe}. Nel caso di \func{splice}
+                                  questo significa che la funzione potrà
+                                  comunque bloccarsi nell'accesso agli altri
+                                  file descriptor (a meno che anch'essi non
+                                  siano stati aperti in modalità non
+                                  bloccante).\\
+    \constd{SPLICE\_F\_MORE} & Indica al kernel che ci sarà l'invio di
+                               ulteriori dati in una \func{splice}
+                               successiva, questo è un suggerimento utile
+                               che viene usato quando \param{fd\_out} è un
+                               socket. Questa opzione consente di utilizzare
+                               delle opzioni di gestione dei socket che
+                               permettono di ottimizzare le trasmissioni via
+                               rete (si veda la descrizione di
+                               \const{TCP\_CORK} in
+                               sez.~\ref{sec:sock_tcp_udp_options} e quella
+                               di \const{MSG\_MORE} in
+                               sez.~\ref{sec:net_sendmsg}).  Attualmente
+                               viene usato solo da \func{splice}, potrà essere
+                               implementato in futuro anche per
+                               \func{vmsplice} e \func{tee}.\\
+    \constd{SPLICE\_F\_GIFT} & Le pagine di memoria utente sono
+                               ``\textsl{donate}'' al kernel; questo
+                               significa che la cache delle pagine e i dati
+                               su disco potranno differire, e che
+                               l'applicazione non potrà modificare
+                               quest'area di memoria. 
+                               Se impostato una seguente \func{splice} che
+                               usa \const{SPLICE\_F\_MOVE} potrà spostare le 
+                               pagine con successo, altrimenti esse dovranno
+                               essere copiate; per usare questa opzione i
+                               dati dovranno essere opportunamente allineati
+                               in posizione ed in dimensione alle pagine di
+                               memoria. Viene usato soltanto da
+                               \func{vmsplice}.\\
     \hline
   \end{tabular}
   \caption{Le costanti che identificano i bit della maschera binaria
@@ -5567,19 +5565,19 @@ che utilizza semplicemente l'informazione.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{POSIX\_FADV\_NORMAL}  & Non ci sono avvisi specifici da fare
+    \constd{POSIX\_FADV\_NORMAL}  & Non ci sono avvisi specifici da fare
                                    riguardo le modalità di accesso, il
                                    comportamento sarà identico a quello che si
                                    avrebbe senza nessun avviso.\\ 
-    \const{POSIX\_FADV\_SEQUENTIAL}& L'applicazione si aspetta di accedere di
+    \constd{POSIX\_FADV\_SEQUENTIAL}& L'applicazione si aspetta di accedere di
                                    accedere ai dati specificati in maniera
                                    sequenziale, a partire dalle posizioni più
                                    basse.\\ 
-    \const{POSIX\_FADV\_RANDOM}  & I dati saranno letti in maniera
+    \constd{POSIX\_FADV\_RANDOM}  & I dati saranno letti in maniera
                                    completamente causale.\\
-    \const{POSIX\_FADV\_NOREUSE} & I dati saranno acceduti una sola volta.\\ 
-    \const{POSIX\_FADV\_WILLNEED}& I dati saranno acceduti a breve.\\ 
-    \const{POSIX\_FADV\_DONTNEED}& I dati non saranno acceduti a breve.\\ 
+    \constd{POSIX\_FADV\_NOREUSE} & I dati saranno acceduti una sola volta.\\ 
+    \constd{POSIX\_FADV\_WILLNEED}& I dati saranno acceduti a breve.\\ 
+    \constd{POSIX\_FADV\_DONTNEED}& I dati non saranno acceduti a breve.\\ 
     \hline
   \end{tabular}
   \caption{Valori delle costanti usabili per l'argomento \param{advice} di
@@ -5733,9 +5731,9 @@ quello di \func{posix\_fallocate} e si può considerare \func{fallocate} come
 l'implementazione ottimale della stessa a livello di kernel.
 
 Inizialmente l'unico altro valore possibile per \param{mode} era
-\const{FALLOC\_FL\_KEEP\_SIZE} che richiede che la dimensione del file (quella
-ottenuta nel campo \var{st\_size} di una struttura \struct{stat} dopo una
-chiamata a \texttt{fstat}) non venga modificata anche quando la somma
+\const{FALLOC\_FL\_KEEP\_SIZE} che richiede che la dimensione del file
+(quella ottenuta nel campo \var{st\_size} di una struttura \struct{stat} dopo
+una chiamata a \texttt{fstat}) non venga modificata anche quando la somma
 di \param{offset} e \param{len} eccede la dimensione corrente, che serve
 quando si deve comunque preallocare dello spazio per scritture in append. In
 seguito sono stati introdotti altri valori, riassunti in
@@ -5750,16 +5748,16 @@ allocazione dello spazio disco dei file.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{FALLOC\_FL\_INSERT}     & .\\
-    \const{FALLOC\_FL\_COLLAPSE\_RANGE}& .\\ 
-    \const{FALLOC\_FL\_KEEP\_SIZE} & Mantiene invariata la dimensione del
+    \constd{FALLOC\_FL\_INSERT}     & .\\
+    \constd{FALLOC\_FL\_COLLAPSE\_RANGE}& .\\ 
+    \constd{FALLOC\_FL\_KEEP\_SIZE} & Mantiene invariata la dimensione del
                                      file, pur allocando lo spazio disco anche
                                      oltre la dimensione corrente del file.\\
-    \const{FALLOC\_FL\_PUNCH\_HOLE}& Crea un \textsl{buco} nel file (vedi
+    \constd{FALLOC\_FL\_PUNCH\_HOLE}& Crea un \textsl{buco} nel file (vedi
                                      sez.~\ref{sec:file_lseek}) rendendolo una
                                      \textit{sparse file} (dal kernel
                                      2.6.38).\\  
-    \const{FALLOC\_FL\_ZERO\_RANGE}& .\\ 
+    \constd{FALLOC\_FL\_ZERO\_RANGE}& .\\ 
     \hline
   \end{tabular}
   \caption{Valori delle costanti usabili per l'argomento \param{mode} di
index 4a2ed348c1adbe473ba73d13676875ddd4fa6742..ead199a5680d1cf759dc64b0f64dd2888638cb05 100644 (file)
@@ -4072,7 +4072,6 @@ compresi gli eventuali caratteri rimandati indietro con \func{ungetc}.
 \subsection{Gli \textit{stream} e i \textit{thread}}
 \label{sec:file_stream_thread}
 
-\itindbeg{thread}
 
 Gli \textit{stream} possono essere usati in applicazioni \textit{multi-thread}
 allo stesso modo in cui sono usati nelle applicazioni normali, ma si deve
@@ -4194,8 +4193,6 @@ con uno dei valori \const{FSETLOCKING\_INTERNAL} o
 
 % TODO trattare \func{clearerr\_unlocked} 
 
-\itindend{thread}
-
 
 
 %%% Local Variables: 
diff --git a/ipc.tex b/ipc.tex
index d32422c792f83453dba7c09dcc0bc1d0c3b3971f..7520e3300f590af435762bb65bba1d707c1bb89e 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -1669,8 +1669,7 @@ possono essere utilizzate, e non si ha a disposizione niente di analogo alle
 funzioni \func{select} e \func{poll}. Questo rende molto scomodo usare più di
 una di queste strutture alla volta; ad esempio non si può scrivere un server
 che aspetti un messaggio su più di una coda senza fare ricorso ad una tecnica
-di \itindex{polling} \textit{polling} che esegua un ciclo di attesa su
-ciascuna di esse.
+di \textit{polling} che esegua un ciclo di attesa su ciascuna di esse.
 
 Come esempio dell'uso delle code di messaggi possiamo riscrivere il nostro
 server di \textit{fortunes} usando queste al posto delle \textit{fifo}. In
@@ -2542,7 +2541,7 @@ controllare il valore dei mutex prima di proseguire in una operazione di
 sblocco non servirebbe comunque, dato che l'operazione non sarebbe atomica.
 Vedremo in sez.~\ref{sec:ipc_lock_file} come sia possibile ottenere
 un'interfaccia analoga a quella appena illustrata, senza incorrere in questi
-problemi, usando il \itindex{file~locking} \textit{file locking}.
+problemi, usando il \textit{file locking}.
 
 
 \subsection{Memoria condivisa}
@@ -3391,8 +3390,8 @@ problemi che non lo rendono una alternativa praticabile per la
 sincronizzazione: anzitutto in caso di terminazione imprevista del processo,
 si lascia allocata la risorsa (il \textsl{file di lock}) e questa deve essere
 sempre cancellata esplicitamente.  Inoltre il controllo della disponibilità
-può essere eseguito solo con una tecnica di \itindex{polling}
-\textit{polling}, ed è quindi molto inefficiente.
+può essere eseguito solo con una tecnica di \textit{polling}, ed è quindi
+molto inefficiente.
 
 La tecnica dei file di lock ha comunque una sua utilità, e può essere usata
 con successo quando l'esigenza è solo quella di segnalare l'occupazione di una
@@ -3409,15 +3408,14 @@ accedere alla seriale si limita a segnalare che la risorsa non è disponibile.
 
 Dato che i file di lock presentano gli inconvenienti illustrati in precedenza,
 la tecnica alternativa di sincronizzazione più comune è quella di fare ricorso
-al \itindex{file~locking} \textit{file locking} (trattato in
-sez.~\ref{sec:file_locking}) usando \func{fcntl} su un file creato per
-l'occasione per ottenere un write lock. In questo modo potremo usare il lock
-come un \textit{mutex}: per bloccare la risorsa basterà acquisire il lock, per
-sbloccarla basterà rilasciare il lock. Una richiesta fatta con un write lock
-metterà automaticamente il processo in stato di attesa, senza necessità di
-ricorrere al \itindex{polling} \textit{polling} per determinare la
-disponibilità della risorsa, e al rilascio della stessa da parte del processo
-che la occupava si otterrà il nuovo lock atomicamente.
+al \textit{file locking} (trattato in sez.~\ref{sec:file_locking}) usando
+\func{fcntl} su un file creato per l'occasione per ottenere un write lock. In
+questo modo potremo usare il lock come un \textit{mutex}: per bloccare la
+risorsa basterà acquisire il lock, per sbloccarla basterà rilasciare il
+lock. Una richiesta fatta con un write lock metterà automaticamente il
+processo in stato di attesa, senza necessità di ricorrere al \textit{polling}
+per determinare la disponibilità della risorsa, e al rilascio della stessa da
+parte del processo che la occupava si otterrà il nuovo lock atomicamente.
 
 Questo approccio presenta il notevole vantaggio che alla terminazione di un
 processo tutti i lock acquisiti vengono rilasciati automaticamente (alla
@@ -3432,17 +3430,16 @@ leggermente più lento.
     \includecodesample{listati/MutexLocking.c}
   \end{minipage} 
   \normalsize 
-  \caption{Il codice delle funzioni che permettono per la gestione dei 
-    \textit{mutex} con il \itindex{file~locking} \textit{file locking}.}
+  \caption{Il codice delle funzioni che permettono per la gestione dei
+    \textit{mutex} con il \textit{file locking}.}
   \label{fig:ipc_flock_mutex}
 \end{figure}
 
 Il codice delle varie funzioni usate per implementare un mutex utilizzando il
-\textit{file locking} \itindex{file~locking} è riportato in
-fig.~\ref{fig:ipc_flock_mutex}; si è mantenuta volutamente una struttura
-analoga alle precedenti funzioni che usano i semafori, anche se le due
-interfacce non possono essere completamente equivalenti, specie per quanto
-riguarda la rimozione del mutex.
+\textit{file locking} è riportato in fig.~\ref{fig:ipc_flock_mutex}; si è
+mantenuta volutamente una struttura analoga alle precedenti funzioni che usano
+i semafori, anche se le due interfacce non possono essere completamente
+equivalenti, specie per quanto riguarda la rimozione del mutex.
 
 La prima funzione (\texttt{\small 1-5}) è \func{CreateMutex}, e serve a
 creare il mutex; la funzione è estremamente semplice, e si limita
@@ -3455,9 +3452,9 @@ mutex.
 La seconda funzione (\texttt{\small 6-10}) è \func{FindMutex}, che, come la
 precedente, è stata definita per mantenere una analogia con la corrispondente
 funzione basata sui semafori. Anch'essa si limita (\texttt{\small 9}) ad
-aprire il file da usare per il \itindex{file~locking} \textit{file locking},
-solo che in questo caso le opzioni di \func{open} sono tali che il file in
-questione deve esistere di già.
+aprire il file da usare per il \textit{file locking}, solo che in questo caso
+le opzioni di \func{open} sono tali che il file in questione deve esistere di
+già.
 
 La terza funzione (\texttt{\small 11-22}) è \func{LockMutex} e serve per
 acquisire il mutex. La funzione definisce (\texttt{\small 14}) e inizializza
@@ -3472,10 +3469,9 @@ La quarta funzione (\texttt{\small 24-34}) è \func{UnlockMutex} e serve a
 rilasciare il mutex. La funzione è analoga alla precedente, solo che in questo
 caso si inizializza (\texttt{\small 28-31}) la struttura \var{lock} per il
 rilascio del lock, che viene effettuato (\texttt{\small 33}) con la opportuna
-chiamata a \func{fcntl}. Avendo usato il \itindex{file~locking} \textit{file
-  locking} in semantica POSIX (si riveda quanto detto
-sez.~\ref{sec:file_posix_lock}) solo il processo che ha precedentemente
-eseguito il lock può sbloccare il mutex.
+chiamata a \func{fcntl}. Avendo usato il \textit{file locking} in semantica
+POSIX (si riveda quanto detto sez.~\ref{sec:file_posix_lock}) solo il processo
+che ha precedentemente eseguito il lock può sbloccare il mutex.
 
 La quinta funzione (\texttt{\small 36-39}) è \func{RemoveMutex} e serve a
 cancellare il mutex. Anche questa funzione è stata definita per mantenere una
@@ -3513,11 +3509,13 @@ nessun inconveniente.
 \subsection{Il \textit{memory mapping} anonimo}
 \label{sec:ipc_mmap_anonymous}
 
-\itindbeg{memory~mapping} Abbiamo già visto che quando i processi sono
-\textsl{correlati}, se cioè hanno almeno un progenitore comune, l'uso delle
-\textit{pipe} può costituire una valida alternativa alle code di messaggi;
-nella stessa situazione si può evitare l'uso di una memoria condivisa facendo
-ricorso al cosiddetto \textit{memory mapping} anonimo.
+\itindbeg{memory~mapping} 
+
+Abbiamo già visto che quando i processi sono \textsl{correlati}, se cioè hanno
+almeno un progenitore comune, l'uso delle \textit{pipe} può costituire una
+valida alternativa alle code di messaggi; nella stessa situazione si può
+evitare l'uso di una memoria condivisa facendo ricorso al cosiddetto
+\textit{memory mapping} anonimo.
 
 In sez.~\ref{sec:file_memory_map} abbiamo visto come sia possibile mappare il
 contenuto di un file nella memoria di un processo, e che, quando viene usato
@@ -3543,6 +3541,7 @@ il \textit{memory mapping} anonimo.\footnote{nei sistemi derivati da SysV una
   nel \textit{memory mapping} anonimo.} Vedremo come utilizzare questa tecnica
 più avanti, quando realizzeremo una nuova versione del monitor visto in
 sez.~\ref{sec:ipc_sysv_shm} che possa restituisca i risultati via rete.
+
 \itindend{memory~mapping}
 
 % TODO: fare esempio di mmap anonima
@@ -3573,9 +3572,8 @@ una interfaccia completamente nuova, che tratteremo in questa sezione.
 Oggi Linux supporta tutti gli oggetti definito nello standard POSIX per l'IPC,
 ma a lungo non è stato così; la memoria condivisa è presente a partire dal
 kernel 2.4.x, i semafori sono forniti dalla \acr{glibc} nella sezione che
-implementa i \itindex{thread} \textit{thread} POSIX di nuova generazione che
-richiedono il kernel 2.6, le code di messaggi sono supportate a partire dal
-kernel 2.6.6.
+implementa i \textit{thread} POSIX di nuova generazione che richiedono il
+kernel 2.6, le code di messaggi sono supportate a partire dal kernel 2.6.6.
 
 La caratteristica fondamentale dell'interfaccia POSIX è l'abbandono dell'uso
 degli identificatori e delle chiavi visti nel \textit{SysV-IPC}, per passare ai
@@ -4384,15 +4382,15 @@ restituendo al chiamante il valore di ritorno.
 \label{sec:ipc_posix_sem}
 
 Fino alla serie 2.4.x del kernel esisteva solo una implementazione parziale
-dei semafori POSIX che li realizzava solo a livello di \itindex{thread}
-\textit{thread} e non di processi,\footnote{questo significava che i semafori
-  erano visibili solo all'interno dei \itindex{thread} \textit{thread} creati
-  da un singolo processo, e non potevano essere usati come meccanismo di
-  sincronizzazione fra processi diversi.} fornita attraverso la sezione delle
-estensioni \textit{real-time} della \acr{glibc} (quelle che si accedono
-collegandosi alla libreria \texttt{librt}). Esisteva inoltre una libreria che
-realizzava (parzialmente) l'interfaccia POSIX usando le funzioni dei semafori
-di \textit{SysV-IPC} (mantenendo così tutti i problemi sottolineati in
+dei semafori POSIX che li realizzava solo a livello di \textit{thread} e non
+di processi,\footnote{questo significava che i semafori erano visibili solo
+  all'interno dei \textit{thread} creati da un singolo processo, e non
+  potevano essere usati come meccanismo di sincronizzazione fra processi
+  diversi.} fornita attraverso la sezione delle estensioni \textit{real-time}
+della \acr{glibc} (quelle che si accedono collegandosi alla libreria
+\texttt{librt}). Esisteva inoltre una libreria che realizzava (parzialmente)
+l'interfaccia POSIX usando le funzioni dei semafori di \textit{SysV-IPC}
+(mantenendo così tutti i problemi sottolineati in
 sez.~\ref{sec:ipc_sysv_sem}).
 
 A partire dal kernel 2.5.7 è stato introdotto un meccanismo di
@@ -4625,10 +4623,10 @@ prototipo è:
 
 La funzione incrementa di uno il valore corrente del semaforo indicato
 dall'argomento \param{sem}, se questo era nullo la relativa risorsa risulterà
-sbloccata, cosicché un altro processo (o \itindex{thread} \textit{thread})
-eventualmente bloccato in una \func{sem\_wait} sul semaforo possa essere
-svegliato e rimesso in esecuzione.  Si tenga presente che la funzione è sicura
-per l'uso all'interno di un gestore di segnali (si ricordi quanto detto in
+sbloccata, cosicché un altro processo (o \textit{thread}) eventualmente
+bloccato in una \func{sem\_wait} sul semaforo possa essere svegliato e rimesso
+in esecuzione.  Si tenga presente che la funzione è sicura per l'uso
+all'interno di un gestore di segnali (si ricordi quanto detto in
 sez.~\ref{sec:sig_signal_handler}).
 
 Se invece di operare su un semaforo se ne volesse semplicemente leggere il
@@ -4759,9 +4757,9 @@ prototipo è:
 La funzione inizializza un semaforo all'indirizzo puntato dall'argomento
 \param{sem}, e come per \func{sem\_open} consente di impostare un valore
 iniziale con \param{value}. L'argomento \param{pshared} serve ad indicare se
-il semaforo deve essere utilizzato dai \itindex{thread} \textit{thread} di uno
-stesso processo (con un valore nullo) o condiviso fra processi diversi (con un
-valore non nullo).
+il semaforo deve essere utilizzato dai \textit{thread} di uno stesso processo
+(con un valore nullo) o condiviso fra processi diversi (con un valore non
+nullo).
 
 Qualora il semaforo debba essere condiviso dai \textit{thread} di uno stesso
 processo (nel qual caso si parla di \textit{thread-shared semaphore}),
@@ -4807,9 +4805,8 @@ La funzione prende come unico argomento l'indirizzo di un semaforo che deve
 essere stato inizializzato con \func{sem\_init}; non deve quindi essere
 applicata a semafori creati con \func{sem\_open}. Inoltre si deve essere
 sicuri che il semaforo sia effettivamente inutilizzato, la distruzione di un
-semaforo su cui sono presenti processi (o \itindex{thread} \textit{thread}) in
-attesa (cioè bloccati in una \func{sem\_wait}) provoca un comportamento
-indefinito.
+semaforo su cui sono presenti processi (o \textit{thread}) in attesa (cioè
+bloccati in una \func{sem\_wait}) provoca un comportamento indefinito.
 
 Si tenga presente infine che utilizzare un semaforo che è stato distrutto con
 \func{sem\_destroy} di nuovo può dare esito a comportamenti indefiniti.  Nel
index 3c794a665bf623627a684907ad99f856a2d2551b..e348bb10e486a7f9901f96fe350208f983fd4b44 100644 (file)
@@ -2911,8 +2911,6 @@ ci sono segnali pendenti la funzione ritornerà immediatamente, in questo modo
 si può eliminare un segnale dalla coda senza dover essere bloccati qualora
 esso non sia presente.
 
-\itindbeg{thread} 
-
 L'uso di queste funzioni è principalmente associato alla gestione dei segnali
 con i \textit{thread}. In genere esse vengono chiamate dal \textit{thread}
 incaricato della gestione, che al ritorno della funzione esegue il codice che
@@ -2924,8 +2922,6 @@ che venga eseguita l'azione predefinita, devono essere mascherati per tutti i
 \textit{thread}, compreso quello dedicato alla gestione, che potrebbe
 riceverlo fra due chiamate successive.
 
-\itindend{thread} 
-
 
 \subsection{La gestione avanzata delle temporizzazioni}
 \label{sec:sig_timer_adv}
@@ -3668,8 +3664,6 @@ dato che essa può solo assicurare che un segnale è stato inviato, dato che
 escluderne l'avvenuto invio al momento della chiamata non significa nulla
 rispetto a quanto potrebbe essere in un qualunque momento successivo.
 
-\itindbeg{stack} 
-
 Una delle caratteristiche di BSD, disponibile anche in Linux, è la possibilità
 di usare uno \textit{stack} alternativo per i segnali; è cioè possibile fare
 usare al sistema un altro \textit{stack} (invece di quello relativo al
@@ -3770,8 +3764,6 @@ si accresce automaticamente (ed infatti eccederne le dimensioni può portare a
 conseguenze imprevedibili).  Si ricordi infine che una chiamata ad una
 funzione della famiglia \func{exec} cancella ogni \textit{stack} alternativo.
 
-\itindend{stack} 
-
 Abbiamo visto in fig.~\ref{fig:sig_sleep_incomplete} come si possa usare
 \func{longjmp} per uscire da un gestore rientrando direttamente nel corpo
 del programma, sappiamo però che nell'esecuzione di un gestore il segnale