Altri indici, aggiornamenti date di copyright e dizionari locali.
[gapil.git] / fileunix.tex
index 6f192a84b1514dbfc5b9abb2c8209c0d4c166c01..ae9e15e0cf2888ed43631db6ebbf576d0fd4a680 100644 (file)
@@ -1,6 +1,6 @@
 %% fileunix.tex
 %%
-%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -34,7 +34,9 @@ tutte le implementazione di un sistema unix-like.
 \subsection{L'architettura dei \textit{file descriptor}}
 \label{sec:file_fd}
 
-\index{file!descriptor|(} Per poter accedere al contenuto di un file occorre
+\index{file!descriptor|(} 
+
+Per poter accedere al contenuto di un file occorre
 creare un canale di comunicazione con il kernel che renda possibile operare su
 di esso (si ricordi quanto visto in sez.~\ref{sec:file_vfs_work}). Questo si
 fa aprendo il file con la funzione \func{open} che provvederà a localizzare
@@ -52,16 +54,16 @@ valore come argomento alle varie funzioni dell'interfaccia.
 
 Per capire come funziona il meccanismo occorre spiegare a grandi linee come il
 kernel gestisce l'interazione fra processi e file.  Il kernel mantiene sempre
-un elenco dei processi attivi nella cosiddetta \textit{process table} ed un
-elenco dei file aperti nella \textit{file table}.
-
-La \textit{process table} è una tabella che contiene una voce per ciascun
-processo attivo nel sistema. In Linux ciascuna voce è costituita da una
-struttura di tipo \struct{task\_struct} nella quale sono raccolte tutte le
-informazioni relative al processo; fra queste informazioni c'è anche il
-puntatore ad una ulteriore struttura di tipo \struct{files\_struct}, in cui
-sono contenute le informazioni relative ai file che il processo ha aperto, ed
-in particolare:
+un elenco dei processi attivi nella cosiddetta \itindex{process~table}
+\textit{process table} ed un elenco dei file aperti nella \textit{file table}.
+
+La \itindex{process~table} \textit{process table} è una tabella che contiene
+una voce per ciascun processo attivo nel sistema. In Linux ciascuna voce è
+costituita da una struttura di tipo \struct{task\_struct} nella quale sono
+raccolte tutte le informazioni relative al processo; fra queste informazioni
+c'è anche il puntatore ad una ulteriore struttura di tipo
+\struct{files\_struct}, in cui sono contenute le informazioni relative ai file
+che il processo ha aperto, ed in particolare:
 \begin{itemize*}
 \item i flag relativi ai file descriptor.
 \item il numero di file aperti.
@@ -79,7 +81,7 @@ file, fra cui:
 \item lo stato del file (nel campo \var{f\_flags}).
 \item il valore della posizione corrente (l'\textit{offset}) nel file (nel
   campo \var{f\_pos}).
-\item un puntatore all'inode\index{inode}\footnote{nel kernel 2.4.x si è in
+\item un puntatore \index{inode} all'inode\footnote{nel kernel 2.4.x si è in
     realtà passati ad un puntatore ad una struttura \struct{dentry} che punta a
     sua volta all'inode\index{inode} passando per la nuova struttura del VFS.}
   del file.
@@ -116,10 +118,10 @@ stato chiuso nessuno in precedenza).
 
 In tutti i sistemi unix-like esiste una convenzione generale per cui ogni
 processo viene lanciato dalla shell con almeno tre file aperti. Questi, per
-quanto appena detto, avranno come \textit{file
-  descriptor}\index{file!descriptor} i valori 0, 1 e 2.  Benché questa sia
-soltanto una convenzione, essa è seguita dalla gran parte delle applicazioni,
-e non aderirvi potrebbe portare a gravi problemi di interoperabilità.
+quanto appena detto, avranno come \index{file!descriptor} \textit{file
+  descriptor} i valori 0, 1 e 2.  Benché questa sia soltanto una convenzione,
+essa è seguita dalla gran parte delle applicazioni, e non aderirvi potrebbe
+portare a gravi problemi di interoperabilità.
 
 Il primo file è sempre associato al cosiddetto \textit{standard input}; è cioè
 il file da cui il processo si aspetta di ricevere i dati in ingresso. Il
@@ -185,9 +187,8 @@ usando direttamente le system call del kernel.
 \label{sec:file_open}
 
 La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è
-quella che crea l'associazione fra un
-\index{\textit{pathname}}\textit{pathname} ed un file descriptor, il suo
-prototipo è:
+quella che crea l'associazione fra un \itindex{pathname}\textit{pathname} ed
+un file descriptor, il suo prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{sys/stat.h}
@@ -198,9 +199,9 @@ prototipo 
   \param{flags}, e, nel caso il file sia creato, con gli eventuali permessi
   specificati da \param{mode}.
   
-  \bodydesc{La funzione ritorna il file descriptor in caso di successo e -1 in
-    caso di errore. In questo caso la variabile \var{errno} assumerà uno dei
-    valori:
+  \bodydesc{La funzione ritorna il file descriptor in caso di successo e $-1$
+    in caso di errore. In questo caso la variabile \var{errno} assumerà uno
+    dei valori:
   \begin{errlist}
   \item[\errcode{EEXIST}] \param{pathname} esiste e si è specificato
     \const{O\_CREAT} e \const{O\_EXCL}.  
@@ -225,10 +226,23 @@ prototipo 
   \errval{EMFILE} e \errval{ENFILE}.}
 \end{functions}
 
-La funzione apre il file, usando il primo file descriptor libero, e crea
-l'opportuna voce (cioè la struttura \struct{file}) nella \textit{file table}.
-Viene sempre restituito come valore di ritorno il file descriptor con il
-valore più basso disponibile.
+
+La funzione apre il file usando il primo file descriptor libero, e crea
+l'opportuna voce, cioè la struttura \struct{file}, nella \textit{file table}
+del processo.  Viene sempre restituito come valore di ritorno il file
+descriptor con il valore più basso disponibile.
+
+\footnotetext[2]{la pagina di manuale di \func{open} segnala che questa
+  opzione è difettosa su NFS, e che i programmi che la usano per stabilire un
+  \textsl{file di lock}\index{file!di lock} possono incorrere in una
+  \textit{race condition}\itindex{race~condition}.  Si consiglia come
+  alternativa di usare un file con un nome univoco e la funzione \func{link}
+  per verificarne l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).}
+
+\footnotetext[3]{acronimo di \textit{Denial of
+    Service}\itindex{Denial~of~Service~(DoS)}, si chiamano così attacchi
+  miranti ad impedire un servizio causando una qualche forma di carico
+  eccessivo per il sistema, che resta bloccato nelle risposte all'attacco.}
 
 \begin{table}[!htb]
   \centering
@@ -238,125 +252,115 @@ valore pi
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
     \hline % modalità di accesso al file
-    \const{O\_RDONLY} & apre il file in sola lettura, le \acr{glibc}
-                        definiscono anche \const{O\_READ} come sinonimo. \\
-    \const{O\_WRONLY} & apre il file in sola scrittura, le \acr{glibc}
-                        definiscono anche \const{O\_WRITE} come sinonimo. \\
-    \const{O\_RDWR} & apre il file sia in lettura che in scrittura. \\
+    \const{O\_RDONLY}  & Apre il file in sola lettura, le \acr{glibc}
+                         definiscono anche \const{O\_READ} come sinonimo. \\
+    \const{O\_WRONLY}  & Apre il file in sola scrittura, le \acr{glibc}
+                         definiscono anche \const{O\_WRITE} come sinonimo. \\
+    \const{O\_RDWR}    & Apre il file sia in lettura che in scrittura. \\
     \hline % modalità di apertura del file
     \hline
-    \const{O\_CREAT} & se il file non esiste verrà creato, con le regole di
-                       titolarità del file viste in
-                       sez.~\ref{sec:file_ownership}. Con questa opzione
-                       l'argomento \param{mode} deve essere specificato. \\
-    \const{O\_EXCL}  & usato in congiunzione con \const{O\_CREAT} fa sì che
-                       la precedente esistenza del file diventi un
-                       errore\protect\footnotemark\ che fa fallire
-                       \func{open} con \errcode{EEXIST}. \\ 
-    \const{O\_NONBLOCK}& apre il file in modalità non bloccante. Questo
-                       valore specifica anche una modalità di operazione (vedi
-                       sotto), e comporta che \func{open} ritorni
-                       immediatamente (l'opzione ha senso solo per le fifo,
-                       torneremo questo in sez.~\ref{sec:ipc_named_pipe}). \\ 
-    \const{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\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
-                        sez.~\ref{sec:file_locking}) sul file. Non è
-                        disponibile in Linux. \\ 
-    \const{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
-                        sez.~\ref{sec:file_locking}) sul file. Non è
-                        disponibile in Linux. \\ 
-    \const{O\_TRUNC}  & se il file esiste ed è un file di dati e la modalità di
-                        apertura consente la scrittura, allora la sua
-                        lunghezza verrà troncata a zero. Se il file è un
-                        terminale o una fifo il flag verrà ignorato, negli 
-                        altri casi il comportamento non è specificato. \\
-    \const{O\_NOFOLLOW}&se \param{pathname} è un link simbolico la chiamata
-                        fallisce. Questa è un'estensione BSD aggiunta in Linux
-                        dal kernel 2.1.126. Nelle versioni precedenti i link
-                        simbolici sono sempre seguiti, e questa opzione è
-                        ignorata. \\
-    \const{O\_DIRECTORY}& se \param{pathname} non è una directory la chiamata
-                        fallisce. Questo flag è specifico di Linux ed è stato
-                        introdotto con il kernel 2.1.126 per evitare dei 
-                        \textit{DoS}\index{DoS}\protect\footnotemark\ quando  
-                        \func{opendir} viene chiamata su una fifo o su un
-                        device di unità a nastri, non deve essere utilizzato
-                        al di fuori dell'implementazione di \func{opendir}. \\
-    \const{O\_LARGEFILE}& nel caso di sistemi a 32 bit che supportano file di
-                        grandi dimensioni consente di aprire file le cui
-                        dimensioni non possono essere rappresentate da numeri
-                        a 31 bit. \\
+    \const{O\_CREAT}   & Se il file non esiste verrà creato, con le regole di
+                         titolarità del file viste in
+                         sez.~\ref{sec:file_ownership}. Con questa opzione
+                         l'argomento \param{mode} deve essere specificato. \\
+    \const{O\_EXCL}    & Usato in congiunzione con \const{O\_CREAT} fa sì che
+                         la precedente esistenza del file diventi un
+                         errore\protect\footnotemark\ che fa fallire
+                         \func{open} con \errcode{EEXIST}. \\ 
+    \const{O\_NONBLOCK}& Apre il file in modalità non bloccante, e
+                         comporta che \func{open} ritorni immediatamente anche
+                         quando dovrebbe bloccarsi (l'opzione ha senso solo per
+                         le fifo, vedi sez.~\ref{sec:ipc_named_pipe}). \\
+    \const{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\_SHLOCK}  & Apre il file con uno shared lock (vedi
+                         sez.~\ref{sec:file_locking}). Specifica di BSD, 
+                         assente in Linux. \\ 
+    \const{O\_EXLOCK}  & Apre il file con un lock esclusivo (vedi
+                         sez.~\ref{sec:file_locking}). Specifica di BSD, 
+                         assente in Linux.\\ 
+    \const{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. \\ 
+    \const{O\_NOFOLLOW}& Se \param{pathname} è un link simbolico la chiamata
+                         fallisce. Questa è un'estensione BSD aggiunta in Linux
+                         dal kernel 2.1.126. Nelle versioni precedenti i link
+                         simbolici sono sempre seguiti, e questa opzione è
+                         ignorata. \\
+    \const{O\_DIRECTORY}&Se \param{pathname} non è una directory la chiamata
+                         fallisce. Questo flag è specifico di Linux ed è stato
+                         introdotto con il kernel 2.1.126 per evitare dei 
+                         \itindex{Denial~of~Service~(DoS)}
+                         \textit{DoS}\protect\footnotemark\ quando 
+                         \func{opendir} viene chiamata su una fifo o su un
+                         dispositivo associato ad una unità a nastri, non deve
+                         dispositivo a nastri; non deve essere utilizzato
+                         al di fuori dell'implementazione di \func{opendir}. \\
+    \const{O\_LARGEFILE}&nel caso di sistemi a 32 bit che supportano file di
+                         grandi dimensioni consente di aprire file le cui
+                         dimensioni non possono essere rappresentate da numeri
+                         a 31 bit. \\
     \hline
-    \hline  % modalità di operazione col file
-    \const{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
-                        scrittura la posizione corrente viene sempre impostata
-                        alla fine del file. Con NFS si può avere una
-                        corruzione del file se più di un processo scrive allo
-                        stesso tempo.\footnotemark\\ 
-    \const{O\_NONBLOCK}&il file viene aperto in modalità non bloccante per
-                        le operazioni di I/O (che tratteremo in
-                        sez.~\ref{sec:file_noblocking}): questo significa il
-                        fallimento di \func{read} in assenza di dati da
-                        leggere e quello di \func{write} in caso di
-                        impossibilità di scrivere immediatamente. Questa
-                        modalità ha senso solo per le fifo e per alcuni file
-                        di dispositivo. \\ 
-    \const{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
-                        \const{O\_NONBLOCK}.\\
-    \const{O\_ASYNC} &  apre il file per l'I/O in modalità asincrona (vedi
-                        sez.~\ref{sec:file_asyncronous_io}). Quando è
-                        impostato viene generato il segnale \const{SIGIO}
-                        tutte le volte che sono disponibili dati in input
-                        sul file. \\  
-    \const{O\_SYNC} &   apre il file per l'input/output sincrono: ogni
-                        \func{write} bloccherà fino al completamento della
-                        scrittura di tutti i dati sull'hardware sottostante.\\ 
-    \const{O\_FSYNC} &  sinonimo di \const{O\_SYNC}, usato da BSD. \\
-    \const{O\_DSYNC} &  richiede una variante di I/O sincorno definita nello
-                        standard POSIX; definita a partire dal kernel 2.1.130
-                        come sinonimo di \const{O\_SYNC}. \\ 
-    \const{O\_RSYNC} &  richiede una variante di I/O sincorno definita nello
-                        standard POSIX; definita a partire dal kernel 2.1.130
-                        come sinonimo di \const{O\_SYNC}. \\
-    \const{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 generale da
-                        specificare in fase di montaggio.\\
-    \const{O\_DIRECT} & esegue l'I/O direttamente dai buffer in user space, ed
-                        in maniera sincrona, in modo da scavalcare i
-                        meccanismi di caching del kernel. In gebere questo
-                        peggiora le prestazioni tranne per casi speciali in
-                        cui sono le applicazioni\footnotemark a gestire il
-                        caching. Per i kernel della serie 2.4 si deve
-                        garantire che i buffer in user space siano allineati
-                        alle dimensioni dei blocchi del filesystem; per il
-                        kernel 2.6 basta che siano allineati a multipli di 512
-                        byte.\\
+    \hline  % modalità di operazione coi file
+    \const{O\_APPEND}  & Il file viene aperto in \itindex{append~mode}
+                         \textit{append mode}. Prima di ciascuna 
+                         scrittura la posizione corrente viene sempre impostata
+                         alla fine del file. Con NFS si può avere una
+                         corruzione del file se più di un processo scrive allo
+                         stesso tempo.\footnotemark\\ 
+    \const{O\_NONBLOCK}& Il file viene aperto in modalità non bloccante per
+                         le operazioni di I/O (che tratteremo in
+                         sez.~\ref{sec:file_noblocking}): questo significa il
+                         fallimento di \func{read} in assenza di dati da
+                         leggere e quello di \func{write} in caso di
+                         impossibilità di scrivere immediatamente. Questa
+                         modalità ha senso solo per le fifo e per alcuni file
+                         di dispositivo. \\ 
+    \const{O\_NDELAY}  & In Linux\footnotemark\ è sinonimo di 
+                         \const{O\_NONBLOCK}.\\
+    \const{O\_ASYNC}   & Apre il file per l'I/O in modalità asincrona (vedi
+                         sez.~\ref{sec:file_asyncronous_io}). Quando è
+                         impostato viene generato il segnale \const{SIGIO}
+                         tutte le volte che sono disponibili dati in input
+                         sul file. \\  
+    \const{O\_SYNC}    & Apre il file per l'input/output sincrono: ogni
+                         \func{write} bloccherà fino al completamento della
+                         scrittura di tutti i dati sull'hardware
+                         sottostante.\\  
+    \const{O\_FSYNC}   & sinonimo di \const{O\_SYNC}, usato da BSD. \\
+    \const{O\_DSYNC}   & Variante di I/O sincrono definita da POSIX; presente
+                         dal kernel 2.1.130 come sinonimo di
+                         \const{O\_SYNC}. \\
+    \const{O\_RSYNC}   & Variante analoga alla precedente, trattata allo stesso
+                         modo. \\
+    \const{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 generale da
+                         specificare in fase di montaggio.\\
+    \const{O\_DIRECT}  & Esegue l'I/O direttamente dai buffer in user space
+                         in maniera sincrona, in modo da scavalcare i
+                         meccanismi di caching del kernel. In genere questo
+                         peggiora le prestazioni tranne quando le
+                         applicazioni\footnotemark ottimizzano il proprio
+                         caching. Per i kernel della serie 2.4 si deve
+                         garantire che i buffer in user space siano allineati
+                         alle dimensioni dei blocchi del filesystem; per il
+                         kernel 2.6 basta che siano allineati a multipli di 512
+                         byte.\\
     \hline
   \end{tabular}
   \caption{Valori e significato dei vari bit del \textit{file status flag}.}
   \label{tab:file_open_flags}
 \end{table}
 
-\footnotetext[2]{la pagina di manuale di \func{open} segnala che questa
-  opzione è difettosa su NFS, e che i programmi che la usano per stabilire un
-  \textsl{file di lock}\index{file!di lock} possono incorrere in una race
-  condition\index{\textit{race~condition}}.  Si consiglia come alternativa di
-  usare un file con un nome univoco e la funzione \func{link} per verificarne
-  l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).}
-
-\footnotetext[3]{\textit{Denial of Service}\index{DoS}, si chiamano così
-  attacchi miranti ad impedire un servizio causando una qualche forma di
-  carico eccessivo per il sistema, che resta bloccato nelle risposte
-  all'attacco.}
-
-\footnotetext[4]{il problema è che NFS non supporta la scrittura in append, ed
-  il kernel deve simularla, ma questo comporta la possibilità di una race
-  condition, vedi sez.~\ref{sec:file_atomic}.}
+\footnotetext[4]{il problema è che NFS non supporta la scrittura in
+  \itindex{append~mode} \textit{append}, ed il kernel deve simularla, ma
+  questo comporta la possibilità di una \itindex{race~condition} \textit{race
+    condition}, vedi sez.~\ref{sec:file_atomic}.}
 
 \footnotetext[5]{l'opzione origina da SVr4, dove però causava il ritorno da
   una \func{read} con un valore nullo e non con un errore, questo introduce
@@ -371,7 +375,7 @@ valore pi
   introdotta con il kernel 2.4.10, le versioni precedenti la ignorano.}
 
 
-Questa caratteristica permette di prevedere qual'è il valore del file
+Questa caratteristica permette di prevedere qual è il valore del file
 descriptor che si otterrà al ritorno di \func{open}, e viene talvolta usata da
 alcune applicazioni per sostituire i file corrispondenti ai file standard
 visti in sez.~\ref{sec:file_std_descr}: se ad esempio si chiude lo standard
@@ -445,8 +449,8 @@ descriptor ritorna disponibile; il suo prototipo 
 \begin{prototype}{unistd.h}{int close(int fd)}
   Chiude il descrittore \param{fd}. 
   
-  \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-    con \var{errno} che assume i valori:
+  \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di
+    errore, con \var{errno} che assume i valori:
   \begin{errlist}
     \item[\errcode{EBADF}]  \param{fd} non è un descrittore valido.
     \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
@@ -454,9 +458,9 @@ descriptor ritorna disponibile; il suo prototipo 
   ed inoltre \errval{EIO}.}
 \end{prototype}
 
-La chiusura di un file rilascia ogni blocco (il \textit{file
-  locking}\index{file!locking} è trattato in sez.~\ref{sec:file_locking}) che
-il processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo
+La chiusura di un file rilascia ogni blocco (il \textit{file locking}
+\index{file!locking} è trattato in sez.~\ref{sec:file_locking}) che il
+processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo
 riferimento (di eventuali copie) ad un file aperto, tutte le risorse nella
 file table vengono rilasciate. Infine se il file descriptor era l'ultimo
 riferimento ad un file su disco quest'ultimo viene cancellato.
@@ -492,9 +496,10 @@ positivo come numero di byte dall'inizio del file. Tutte le operazioni di
 lettura e scrittura avvengono a partire da questa posizione che viene
 automaticamente spostata in avanti del numero di byte letti o scritti.
 
-In genere (a meno di non avere richiesto la modalità \const{O\_APPEND}) questa
-posizione viene impostata a zero all'apertura del file. È possibile impostarla
-ad un valore qualsiasi con la funzione \funcd{lseek}, il cui prototipo è:
+In genere (a meno di non avere richiesto la modalità \itindex{append~mode}
+\const{O\_APPEND}) questa posizione viene impostata a zero all'apertura del
+file. È possibile impostarla ad un valore qualsiasi con la funzione
+\funcd{lseek}, il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{unistd.h}
@@ -502,8 +507,8 @@ ad un valore qualsiasi con la funzione \funcd{lseek}, il cui prototipo 
   Imposta la posizione attuale nel file. 
   
   \bodydesc{La funzione ritorna il valore della posizione corrente in caso di
-    successo e -1 in caso di errore nel qual caso \var{errno} assumerà uno dei
-    valori:
+    successo e $-1$ in caso di errore nel qual caso \var{errno} assumerà uno
+    dei valori:
   \begin{errlist}
   \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket\index{socket} o una
     fifo.
@@ -542,8 +547,8 @@ Si tenga presente inoltre che usare \const{SEEK\_END} non assicura affatto che
 la successiva scrittura avvenga alla fine del file, infatti se questo è stato
 aperto anche da un altro processo che vi ha scritto, la fine del file può
 essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
-(questa è una potenziale sorgente di \textit{race condition}
-\index{\textit{race~condition}}, vedi sez.~\ref{sec:file_atomic}).
+(questa è una potenziale sorgente di \itindex{race~condition}\textit{race
+  condition}, vedi sez.~\ref{sec:file_atomic}).
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
 questo caso la funzione ritorna l'errore \errcode{EPIPE}. Questo, oltre che per
@@ -569,7 +574,7 @@ prototipo 
   \param{buf}.
   
   \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
-    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
+    $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
     aver potuto leggere qualsiasi dato.
@@ -643,14 +648,14 @@ definizione di un'altra funzione di lettura, \funcd{pread}, il cui prototipo 
 Cerca di leggere \param{count} byte dal file \param{fd}, a partire dalla
 posizione \param{offset}, nel buffer \param{buf}.
   
-\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
-  in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per
-  \func{read} e \func{lseek}.}
+\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
+  $-1$ in caso di errore, nel qual caso \var{errno} assumerà i valori già
+  visti per \func{read} e \func{lseek}.}
 \end{prototype}
 
 La funzione prende esattamente gli stessi argomenti di \func{read} con lo
 stesso significato, a cui si aggiunge l'argomento \func{offset} che indica una
-posizione sul file. Indetico è il comportamento ed il valore di ritorno. La
+posizione sul file. Identico è il comportamento ed il valore di ritorno. La
 funzione serve quando si vogliono leggere dati dal file senza modificare la
 posizione corrente.
 
@@ -682,7 +687,8 @@ scrivere su di esso utilizzando la funzione \funcd{write}, il cui prototipo 
   Scrive \param{count} byte dal buffer \param{buf} sul file \param{fd}.
   
   \bodydesc{La funzione ritorna il numero di byte scritti in caso di successo
-    e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
+    e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei
+    valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] \param{fd} è connesso ad un oggetto che non consente
     la scrittura.
@@ -706,11 +712,11 @@ scrivere su di esso utilizzando la funzione \funcd{write}, il cui prototipo 
 Come nel caso di \func{read} la funzione tenta di scrivere \param{count} byte
 a partire dalla posizione corrente nel file e sposta automaticamente la
 posizione in avanti del numero di byte scritti. Se il file è aperto in
-modalità \const{O\_APPEND} i dati vengono sempre scritti alla fine del file.
-Lo standard POSIX richiede che i dati scritti siano immediatamente disponibili
-ad una \func{read} chiamata dopo che la \func{write} che li ha scritti è
-ritornata; ma dati i meccanismi di caching non è detto che tutti i filesystem
-supportino questa capacità.
+modalità \itindex{append~mode} \const{O\_APPEND} i dati vengono sempre scritti
+alla fine del file.  Lo standard POSIX richiede che i dati scritti siano
+immediatamente disponibili ad una \func{read} chiamata dopo che la
+\func{write} che li ha scritti è ritornata; ma dati i meccanismi di caching
+non è detto che tutti i filesystem supportino questa capacità.
 
 Se \param{count} è zero la funzione restituisce zero senza fare nient'altro.
 Per i file ordinari il numero di byte scritti è sempre uguale a quello
@@ -726,9 +732,9 @@ nel file, il suo prototipo 
 Cerca di scrivere sul file \param{fd}, a partire dalla posizione
 \param{offset}, \param{count} byte dal buffer \param{buf}.
   
-\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
-  in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per
-  \func{write} e \func{lseek}.}
+\bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
+  $-1$ in caso di errore, nel qual caso \var{errno} assumerà i valori già
+  visti per \func{write} e \func{lseek}.}
 \end{prototype}
 \noindent e per essa valgono le stesse considerazioni fatte per \func{pread}.
 
@@ -779,10 +785,11 @@ stesso file, in particolare occorre tenere presente che:
   scrittura eccede la dimensione corrente del file questo verrà esteso
   automaticamente con l'aggiornamento del campo \var{i\_size}
   nell'inode\index{inode}.
-\item se un file è in modalità \const{O\_APPEND} tutte le volte che viene
-  effettuata una scrittura la posizione corrente viene prima impostata alla
-  dimensione corrente del file letta dall'inode\index{inode}. Dopo la
-  scrittura il file viene automaticamente esteso.
+\item se un file è in modalità \itindex{append~mode} \const{O\_APPEND} tutte
+  le volte che viene effettuata una scrittura la posizione corrente viene
+  prima impostata alla dimensione corrente del file letta
+  dall'inode\index{inode}. Dopo la scrittura il file viene automaticamente
+  esteso.
 \item l'effetto di \func{lseek} è solo quello di cambiare il campo
   \var{f\_pos} nella struttura \struct{file} della \textit{file table}, non
   c'è nessuna operazione sul file su disco. Quando la si usa per porsi alla
@@ -836,15 +843,15 @@ Se dal punto di vista della lettura dei dati questo non comporta nessun
 problema, quando si andrà a scrivere le operazioni potranno mescolarsi in
 maniera imprevedibile.  Il sistema però fornisce in alcuni casi la possibilità
 di eseguire alcune operazioni di scrittura in maniera coordinata anche senza
-utilizzare meccanismi di sincronizzazione più complessi (come il \textit{file
-  locking}\index{file!locking}, che esamineremo in
+utilizzare meccanismi di sincronizzazione più complessi (come il
+\index{file!locking} \textit{file locking}, che esamineremo in
 sez.~\ref{sec:file_locking}).
 
 Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui
 vari processi devono scrivere alla fine di un file (ad esempio un file di
 log). Come accennato in sez.~\ref{sec:file_lseek} impostare la posizione alla
-fine del file e poi scrivere può condurre ad una \textit{race
-  condition}\index{\textit{race~condition}}: infatti può succedere che un
+fine del file e poi scrivere può condurre ad una
+\itindex{race~condition}\textit{race condition}: infatti può succedere che un
 secondo processo scriva alla fine del file fra la \func{lseek} e la
 \func{write}; in questo caso, come abbiamo appena visto, il file sarà esteso,
 ma il nostro primo processo avrà ancora la posizione corrente impostata con la
@@ -853,19 +860,20 @@ ma il nostro primo processo avr
 
 Il problema è che usare due system call in successione non è un'operazione
 atomica; il problema è stato risolto introducendo la modalità
-\const{O\_APPEND}. In questo caso infatti, come abbiamo descritto in
-precedenza, è il kernel che aggiorna automaticamente la posizione alla fine
-del file prima di effettuare la scrittura, e poi estende il file. Tutto questo
-avviene all'interno di una singola system call (la \func{write}) che non
-essendo interrompibile da un altro processo costituisce un'operazione atomica.
+\itindex{append~mode} \const{O\_APPEND}. In questo caso infatti, come abbiamo
+descritto in precedenza, è il kernel che aggiorna automaticamente la posizione
+alla fine del file prima di effettuare la scrittura, e poi estende il file.
+Tutto questo avviene all'interno di una singola system call (la \func{write})
+che non essendo interrompibile da un altro processo costituisce un'operazione
+atomica.
 
 Un altro caso tipico in cui è necessaria l'atomicità è quello in cui si vuole
 creare un \textsl{file di lock}\index{file!di lock}, bloccandosi se il file
 esiste. In questo caso la sequenza logica porterebbe a verificare prima
 l'esistenza del file con una \func{stat} per poi crearlo con una \func{creat};
-di nuovo avremmo la possibilità di una race
-condition\index{\textit{race~condition}} da parte di un altro processo che
-crea lo stesso file fra il controllo e la creazione.
+di nuovo avremmo la possibilità di una \textit{race
+  condition}\itindex{race~condition} da parte di un altro processo che crea lo
+stesso file fra il controllo e la creazione.
 
 Per questo motivo sono stati introdotti per \func{open} i due flag
 \const{O\_CREAT} e \const{O\_EXCL}. In questo modo l'operazione di controllo
@@ -923,8 +931,8 @@ usare le due funzioni \funcd{fsync} e \funcd{fdatasync}, i cui prototipi sono:
   \funcdecl{int fdatasync(int fd)}
   Sincronizza i dati del file \param{fd}.
   
-  \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-    nel qual caso \var{errno} assume i valori:
+  \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di
+    errore, nel qual caso \var{errno} assume i valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] \param{fd} è un file speciale che non supporta la
     sincronizzazione.
@@ -959,7 +967,7 @@ prototipo 
   Crea una copia del file descriptor \param{oldfd}.
   
   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
-    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei
+    $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{oldfd} non è un file aperto.
@@ -991,9 +999,9 @@ sull'altro (dato che quello che viene modificato 
 della \textit{file table} a cui entrambi fanno riferimento). L'unica
 differenza fra due file descriptor duplicati è che ciascuno avrà il suo
 \textit{file descriptor flag}; a questo proposito va specificato che nel caso
-di \func{dup} il flag di \textit{close-on-exec}\index{\textit{close-on-exec}}
-(vedi sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre
-cancellato nella copia.
+di \func{dup} il flag di \textit{close-on-exec}\itindex{close-on-exec} (vedi
+sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre cancellato
+nella copia.
 
 L'uso principale di questa funzione è per la redirezione dell'input e
 dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec};
@@ -1006,14 +1014,14 @@ disponibile.
 
 Dato che questa è l'operazione più comune, è prevista una diversa versione
 della funzione, \funcd{dup2}, che permette di specificare esplicitamente
-qual'è il valore di file descriptor che si vuole avere come duplicato; il suo
+qual è il valore di file descriptor che si vuole avere come duplicato; il suo
 prototipo è:
 \begin{prototype}{unistd.h}{int dup2(int oldfd, int newfd)}
   
   Rende \param{newfd} una copia del file descriptor \param{oldfd}.
   
   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
-    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
+    $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha
     un valore fuori dall'intervallo consentito per i file descriptor.
@@ -1027,9 +1035,9 @@ sar
 allo stesso valore per il file descriptor).
 
 La duplicazione dei file descriptor può essere effettuata anche usando la
-funzione di controllo dei file \func{fnctl} (che esamineremo in
+funzione di controllo dei file \func{fcntl} (che esamineremo in
 sez.~\ref{sec:file_fcntl}) con il parametro \const{F\_DUPFD}.  L'operazione ha
-la sintassi \code{fnctl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per
+la sintassi \code{fcntl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per
 \param{newfd} diventa equivalente a \func{dup}. 
 
 La sola differenza fra le due funzioni\footnote{a parte la sintassi ed i
@@ -1049,8 +1057,8 @@ descriptor, che non riguardano la normale lettura e scrittura di dati, ma la
 gestione sia delle loro proprietà, che di tutta una serie di ulteriori
 funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si
   gestiscono con questa funzione varie modalità di I/O asincrono (vedi
-  sez.~\ref{sec:file_asyncronous_operation}) e il file
-  locking\index{file!locking} (vedi sez.~\ref{sec:file_locking}).}
+  sez.~\ref{sec:file_asyncronous_operation}) e il \textit{file locking}
+  \index{file!locking} (vedi sez.~\ref{sec:file_locking}).}
 
 Per queste operazioni di manipolazione e di controllo delle varie proprietà e
 caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl},
@@ -1065,8 +1073,8 @@ il cui prototipo 
   sul file \param{fd}.
   
   \bodydesc{La funzione ha valori di ritorno diversi a seconda
-    dell'operazione. In caso di errore il valore di ritorno è sempre -1 ed il
-    codice dell'errore è restituito nella variabile \var{errno}; i codici
+    dell'operazione. In caso di errore il valore di ritorno è sempre $-1$ ed
+    il codice dell'errore è restituito nella variabile \var{errno}; i codici
     possibili dipendono dal tipo di operazione, l'unico valido in generale è:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{fd} non è un file aperto.
@@ -1085,73 +1093,75 @@ per \var{cmd} 
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore
   maggiore o uguale ad \param{arg} e ne fa una copia di \param{fd}. Ritorna il
-  nuovo file descriptor in caso di successo e -1 in caso di errore. Gli errori
-  possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore del
-  massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il
+  nuovo file descriptor in caso di successo e $-1$ in caso di errore. Gli
+  errori possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore
+  del massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il
   massimo numero di descrittori consentito.
 \item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
   valore specificato con \param{arg}. Al momento l'unico bit usato è quello di
-  \textit{close-on-exec}\index{\textit{close-on-exec}}, identificato dalla
-  costante \const{FD\_CLOEXEC}, che serve a richiedere che il file venga
-  chiuso nella esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}).
-  Ritorna un valore nullo in caso di successo e -1 in caso di errore.
+  \textit{close-on-exec}\itindex{close-on-exec}, identificato dalla costante
+  \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
+  esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}).  Ritorna un
+  valore nullo in caso di successo e $-1$ in caso di errore.
 \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
-  \param{fd} o -1 in caso di errore; se \const{FD\_CLOEXEC} è impostato i file
-  descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti (il
-  comportamento predefinito) restano aperti.
+  \param{fd} o $-1$ in caso di errore; se \const{FD\_CLOEXEC} è impostato i
+  file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti
+  (il comportamento predefinito) restano aperti.
 \item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag} in
-  caso di successo o -1 in caso di errore; permette cioè di rileggere quei bit
-  impostati da \func{open} all'apertura del file che vengono memorizzati
+  caso di successo o $-1$ in caso di errore; permette cioè di rileggere quei
+  bit impostati da \func{open} all'apertura del file che vengono memorizzati
   (quelli riportati nella prima e terza sezione di
   tab.~\ref{tab:file_open_flags}).
 \item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore
-  specificato da \param{arg}, ritorna un valore nullo in caso di successo o -1
-  in caso di errore. Possono essere impostati solo i bit riportati nella terza
-  sezione di tab.~\ref{tab:file_open_flags}.\footnote{la pagina di manuale
-    riporta come impostabili solo \const{O\_APPEND}, \const{O\_NONBLOCK} e
-    \const{O\_ASYNC}.}
+  specificato da \param{arg}, ritorna un valore nullo in caso di successo o
+  $-1$ in caso di errore. Possono essere impostati solo i bit riportati nella
+  terza sezione di tab.~\ref{tab:file_open_flags}.\footnote{la pagina di
+    manuale riporta come impostabili solo \const{O\_APPEND},
+    \const{O\_NONBLOCK} e \const{O\_ASYNC}.}
 \item[\const{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.  Questa
+  \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.  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
   specificato nella struttura puntata da \param{lock}. Se il lock è tenuto da
-  qualcun'altro ritorna immediatamente restituendo -1 e imposta \var{errno} a
+  qualcun altro ritorna immediatamente restituendo $-1$ e imposta \var{errno} a
   \errcode{EACCES} o \errcode{EAGAIN}, in caso di successo ritorna un valore
   nullo. 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
   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}, in caso di successo ritorna un valore nullo.
-  Questa funzionalità è trattata in dettaglio in
+  l'attesa viene interrotta da un segnale la funzione restituisce $-1$ e
+  imposta \var{errno} a \errcode{EINTR}, in caso di successo ritorna un valore
+  nullo.  Questa funzionalità è trattata in dettaglio in
   sez.~\ref{sec:file_posix_lock}.
 \item[\const{F\_GETOWN}] restituisce il \acr{pid} del processo o
-  l'identificatore del process group\footnote{i \texttt{process group} sono
+  l'identificatore del \itindex{process~group} \textit{process
+    group}\footnote{i \itindex{process~group} \textit{process group} sono
     (vedi sez.~\ref{sec:sess_proc_group}) raggruppamenti di processi usati nel
     controllo di sessione; a ciascuno di essi è associato un identificatore
     (un numero positivo analogo al \acr{pid}).}  che è preposto alla ricezione
   dei segnali \const{SIGIO} e \const{SIGURG} per gli eventi associati al file
-  descriptor \param{fd}. Nel caso di un process group viene restituito un
-  valore negativo il cui valore assoluto corrisponde all'identificatore del
-  process group. In caso di errore viene restituito -1.
+  descriptor \param{fd}. Nel caso di un \textit{process group} viene
+  restituito un valore negativo il cui valore assoluto corrisponde
+  all'identificatore del \itindex{process~group}\textit{process group}.  In
+  caso di errore viene restituito $-1$.
 \item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg},
-  l'identificatore del processo o del \textit{process group} che riceverà i
-  segnali \const{SIGIO} e \const{SIGURG} per gli eventi associati al file
-  descriptor \param{fd}, ritorna un valore nullo in caso di successo o -1 in
-  caso di errore.  Come per \const{F\_GETOWN}, per impostare un
-  \textit{process group} si deve usare per \param{arg} un valore negativo, il
-  cui valore assoluto corrisponde all'identificatore del \textit{process
-    group}.
+  l'identificatore del processo o del \itindex{process~group} \textit{process
+    group} che riceverà i segnali \const{SIGIO} e \const{SIGURG} per gli
+  eventi associati al file descriptor \param{fd}, ritorna un valore nullo in
+  caso di successo o $-1$ in caso di errore.  Come per \const{F\_GETOWN}, per
+  impostare un \itindex{process~group} \textit{process group} si deve usare
+  per \param{arg} un valore negativo, il cui valore assoluto corrisponde
+  all'identificatore del \itindex{process~group} \textit{process group}.
 \item[\const{F\_GETSIG}] restituisce il valore del segnale inviato quando ci
   sono dati disponibili in ingresso su un file descriptor aperto ed impostato
   per l'I/O asincrono (si veda sez.~\ref{sec:file_asyncronous_io}). Il valore 0
   indica il valore predefinito (che è \const{SIGIO}), un valore diverso da
   zero indica il segnale richiesto, (che può essere anche lo stesso
-  \const{SIGIO}). In caso di errore ritorna -1.
+  \const{SIGIO}). In caso di errore ritorna $-1$.
 \item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa
   possibile effettuare I/O sul file descriptor in caso di I/O asincrono,
-  ritorna un valore nullo in caso di successo o -1 in caso di errore. Il
+  ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Il
   valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
   valore diverso da zero (compreso lo stesso \const{SIGIO}) specifica il
   segnale voluto; l'uso di un valore diverso da zero permette inoltre, se si è
@@ -1162,27 +1172,28 @@ per \var{cmd} 
   (come vedremo in sez.~\ref{sec:file_asyncronous_io}).\footnote{i due comandi
     \const{F\_SETSIG} e \const{F\_GETSIG} sono una estensione specifica di
     Linux.}
-\item[\const{F\_SETLEASE}] imposta o rimuove un \textit{file
-    lease}\footnote{questa è una nuova funzionalità, specifica di Linux, e
-    presente solo a partire dai kernel della serie 2.4.x, in cui il processo
-    che detiene un \textit{lease} su un file riceve una notifica qualora un
-    altro processo cerca di eseguire una \func{open} o una \func{truncate} su
-    di esso.} sul file descriptor \var{fd} a seconda del valore del terzo
-  argomento, che in questo caso è un \ctyp{int}, ritorna un valore nullo in
-  caso di successo o -1 in caso di errore. Questa funzionalità avanzata è
-  trattata in dettaglio in sez.~\ref{sec:file_asyncronous_operation}.
-\item[\const{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. Con questo comando il terzo argomento può essere omesso. Questa
+\item[\const{F\_SETLEASE}] imposta o rimuove un \index{file!lease}
+  \textit{file lease}\footnote{questa è una nuova funzionalità, specifica di
+    Linux, e presente solo a partire dai kernel della serie 2.4.x, in cui il
+    processo che detiene un \textit{lease} su un file riceve una notifica
+    qualora un altro processo cerca di eseguire una \func{open} o una
+    \func{truncate} su di esso.} sul file descriptor \var{fd} a seconda del
+  valore del terzo argomento, che in questo caso è un \ctyp{int}, ritorna un
+  valore nullo in caso di successo o $-1$ in caso di errore. Questa
   funzionalità avanzata è trattata in dettaglio in
-  sez.~\ref{sec:file_asyncronous_operation}.
+  sez.~\ref{sec:file_asyncronous_lease}.
+\item[\const{F\_GETLEASE}] restituisce il tipo di \textit{file lease}
+  \index{file!lease} che il processo detiene nei confronti del file descriptor
+  \var{fd} o $-1$ in caso di errore. Con questo comando il terzo argomento può
+  essere omesso. Questa funzionalità avanzata è trattata in dettaglio in
+  sez.~\ref{sec:file_asyncronous_lease}.
 \item[\const{F\_NOTIFY}] attiva un meccanismo di notifica per cui viene
   riportata al processo chiamante, tramite il segnale \const{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
-  in essa contenuti; ritorna un valore nullo in caso di successo o -1 in caso
+  in essa contenuti; ritorna un valore nullo in caso di successo o $-1$ in caso
   di errore. Questa funzionalità avanzata, disponibile dai kernel della serie
-  2.4.x, è trattata in dettaglio in sez.~\ref{sec:file_asyncronous_operation}.
+  2.4.x, è trattata in dettaglio in sez.~\ref{sec:file_asyncronous_lease}.
 \end{basedescript}
 
 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
@@ -1190,9 +1201,10 @@ poter essere affrontate in tutti i loro aspetti a questo punto; saranno
 pertanto riprese più avanti quando affronteremo le problematiche ad esse
 relative. In particolare le tematiche relative all'I/O asincrono e ai vari
 meccanismi di notifica saranno trattate in maniera esaustiva in
-sez.~\ref{sec:file_asyncronous_operation} mentre quelle relative al
-\textit{file locking}\index{file!locking} saranno esaminate in
-sez.~\ref{sec:file_locking}).
+sez.~\ref{sec:file_asyncronous_access} mentre quelle relative al \textit{file
+  locking}\index{file!locking} saranno esaminate in
+sez.~\ref{sec:file_locking}). L'uso di questa funzione con i socket verrà
+trattato in sez.~\ref{sec:sock_ctrl_func}.
 
 Si tenga presente infine che quando si usa la funzione per determinare le
 modalità di accesso con cui è stato aperto il file (attraverso l'uso del
@@ -1211,7 +1223,7 @@ accesso dal \textit{file status flag}.
 \subsection{La funzione \func{ioctl}}
 \label{sec:file_ioctl}
 
-Benché il concetto di \textit{everything is a file} si sia dimostratato molto
+Benché il concetto di \textit{everything is a file} si sia dimostrato molto
 valido anche per l'interazione con i dispositivi più vari, fornendo una
 interfaccia che permette di interagire con essi tramite le stesse funzioni
 usate per i normali file di dati, esisteranno sempre caratteristiche
@@ -1232,12 +1244,12 @@ file descriptor.  Il prototipo di questa funzione 
   
   \bodydesc{La funzione nella maggior parte dei casi ritorna 0, alcune
     operazioni usano però il valore di ritorno per restituire informazioni. In
-    caso di errore viene sempre restituito -1 ed \var{errno} assumerà uno dei
+    caso di errore viene sempre restituito $-1$ ed \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
-  \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un device, o
-    la richiesta non è applicabile all'oggetto a cui fa riferimento
-    \param{fd}.
+  \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un
+    dispositivo, o la richiesta non è applicabile all'oggetto a cui fa
+    riferimento \param{fd}.
   \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
     validi.
   \end{errlist}
@@ -1278,21 +1290,50 @@ imprevedibili o indesiderati.
 
 Data la assoluta specificità della funzione, il cui comportamento varia da
 dispositivo a dispositivo, non è possibile fare altro che dare una descrizione
-sommaria delle sue caratteristiche; torneremo ad esaminare in seguito quelle
-relative ad alcuni casi specifici (ad esempio la gestione dei terminali è
-effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix),
-qui riportiamo solo i valori di alcuni comandi che sono definiti per ogni
-file:
+sommaria delle sue caratteristiche; torneremo ad esaminare in
+seguito\footnote{per l'uso con i socket si veda
+  sez.~\ref{sec:sock_ctrl_func}.}  quelle relative ad alcuni casi specifici
+(ad esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in
+quasi tutte le implementazioni di Unix), qui riportiamo solo i valori di
+alcuni comandi che sono definiti per ogni file:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{FIOCLEX}] Imposta il bit di \textit{close on exec}.
-\item[\const{FIONCLEX}] Cancella il bit di \textit{close on exec}.
+\item[\const{FIOCLEX}] Imposta il flag di
+  \textit{close-on-exec}\itindex{close-on-exec}.
+\item[\const{FIONCLEX}] Cancella il flag di
+  \textit{close-on-exec}\itindex{close-on-exec}.
 \item[\const{FIOASYNC}] Abilita l'I/O asincrono.
 \item[\const{FIONBIO}] Abilita l'I/O in modalità non bloccante.
 \end{basedescript}
 relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}.
 
 
+
+% TODO estendere la lista delle ioctl
+
+
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+
+% LocalWords:  descriptor system call cap like kernel sez l'inode inode VFS tab
+% LocalWords:  process table struct files flags pos all'inode dentry fig shell
+% LocalWords:  error POSIX STDIN FILENO STDOUT STDERR unistd read write lseek
+% LocalWords:  close pathname sys fcntl int const char errno EEXIST CREAT EXCL
+% LocalWords:  EISDIR ENOTDIR ENXIO NOBLOCK WRONLY fifo ENODEV ETXTBSY ELOOP of
+% LocalWords:  NOFOLLOW EACCES ENAMETOOLONG ENOENT EROFS EFAULT ENOSPC ENOMEM
+% LocalWords:  EMFILE ENFILE NFS lock race condition Denial Service DoS RDONLY
+% LocalWords:  glibc RDWR NONBLOCK NOCTTY SHLOCK shared BSD EXLOCK TRUNC device
+% LocalWords:  opendir LARGEFILE APPEND append NDELAY ASYNC l'I SIGIO SYNC SVr
+% LocalWords:  DSYNC RSYNC filesystem DIRECT caching SGI IRIX dell'I FreeBSD fd
+% LocalWords:  fork exec umask SOURCE creat filedes EBADF EINTR EIO locking off
+% LocalWords:  behind sync flush shutdown whence ESPIPE socket EINVAL INCR XTND
+% LocalWords:  SEEK CUR EPIPE ssize void buf size count EAGAIN EWOULDBLOCK log
+% LocalWords:  Specification pwrite pread EFBIG SIGPIPE nell'inode dall'inode
+% LocalWords:  CLOEXEC stat fsync cache update l'update bdflush Documentation
+% LocalWords:  fdatasync fstat ext dup oldfd newfd DUPFD cmd long arg flock pid
+% LocalWords:  SETFD GETFD GETFL SETFL GETLK SETLK SETLKW GETOWN group SIGURG
+% LocalWords:  SETOWN GETSIG SETSIG sigaction SIGINFO siginfo SETLEASE lease is
+% LocalWords:  truncate GETLEASE NOTIFY all'I AND ACCMODE ioctl everything argp
+% LocalWords:  framebuffer request ENOTTY CDROM nell'header magic number
+% LocalWords:  FIOCLEX FIONCLEX FIOASYNC FIONBIO NOATIME