Aggiunti alcuni header alla lista e quattro chiacchiere sulle alternative
[gapil.git] / fileunix.tex
index 7eddb1400549971a7e2d32848549f874cf73ae96..a36652d429b1a8a38295c7522b8833a220e21aef 100644 (file)
@@ -3,11 +3,12 @@
 
 
 Esamineremo in questo capitolo la prima delle due interfacce di programmazione
 
 
 Esamineremo in questo capitolo la prima delle due interfacce di programmazione
-per i file, quella dei \textit{file descriptor}, nativa di Unix. Questa è
-l'interfaccia di basso livello provvista direttamente dalle system call, che
-non prevede funzionalità evolute come la bufferizzazione o funzioni di lettura
-o scrittura formattata, e sulla quale è costruita anche l'interfaccia definita
-dallo standard ANSI C che affronteremo al \capref{cha:files_std_interface}.
+per i file, quella dei \textit{file descriptor}\index{file descriptor},
+nativa di Unix. Questa è l'interfaccia di basso livello provvista direttamente
+dalle system call, che non prevede funzionalità evolute come la
+bufferizzazione o funzioni di lettura o scrittura formattata, e sulla quale è
+costruita anche l'interfaccia definita dallo standard ANSI C che affronteremo
+al \capref{cha:files_std_interface}.
 
 
 
 
 
 
@@ -33,10 +34,10 @@ terminate le operazioni, il file dovr
 canale di comunicazione impedendo ogni ulteriore operazione.
 
 All'interno di ogni processo i file aperti sono identificati da un intero non
 canale di comunicazione impedendo ogni ulteriore operazione.
 
 All'interno di ogni processo i file aperti sono identificati da un intero non
-negativo, chiamato appunto \textit{file descriptor}. Quando un file viene
-aperto la funzione \func{open} restituisce questo numero, tutte le ulteriori
-operazioni saranno compiute specificando questo stesso valore come argomento
-alle varie funzioni dell'interfaccia.
+negativo, chiamato appunto \textit{file descriptor}\index{file descriptor}.
+Quando un file viene aperto la funzione \func{open} restituisce questo numero,
+tutte le ulteriori operazioni saranno compiute specificando questo stesso
+valore come argomento alle varie funzioni dell'interfaccia.
 
 Per capire come funziona il meccanismo occorre spiegare a grandi linee come è
 che il kernel gestisce l'interazione fra processi e file.  Il kernel mantiene
 
 Per capire come funziona il meccanismo occorre spiegare a grandi linee come è
 che il kernel gestisce l'interazione fra processi e file.  Il kernel mantiene
@@ -56,8 +57,8 @@ particolare:
 \item una tabella che contiene un puntatore alla relativa voce nella
   \textit{file table} per ogni file aperto.
 \end{itemize*}
 \item una tabella che contiene un puntatore alla relativa voce nella
   \textit{file table} per ogni file aperto.
 \end{itemize*}
-il \textit{file descriptor} in sostanza è l'intero positivo che indicizza
-quest'ultima tabella.
+il \textit{file descriptor}\index{file descriptor} in sostanza è l'intero
+positivo che indicizza quest'ultima tabella.
 
 La \textit{file table} è una tabella che contiene una voce per ciascun file
 che è stato aperto nel sistema. In Linux è costituita da strutture di tipo
 
 La \textit{file table} è una tabella che contiene una voce per ciascun file
 che è stato aperto nel sistema. In Linux è costituita da strutture di tipo
@@ -87,23 +88,23 @@ varie strutture di dati sulla quale essa 
 \end{figure}
 Ritorneremo su questo schema più volte, dato che esso è fondamentale per
 capire i dettagli del funzionamento dell'interfaccia dei \textit{file
 \end{figure}
 Ritorneremo su questo schema più volte, dato che esso è fondamentale per
 capire i dettagli del funzionamento dell'interfaccia dei \textit{file
-  descriptor}.
+  descriptor}\index{file descriptor}.
 
 
 \subsection{I file standard}
 \label{sec:file_std_descr}
 
 
 
 \subsection{I file standard}
 \label{sec:file_std_descr}
 
-Come accennato i \textit{file descriptor} non sono altro che un indice nella
-tabella dei file aperti di ciascun processo; per questo motivo essi vengono
-assegnati in successione tutte le volte che si apre un nuovo file (se non ne è
-stato chiuso nessuno in precedenza).
+Come accennato i \textit{file descriptor}\index{file descriptor} non sono
+altro che un indice nella tabella dei file aperti di ciascun processo; per
+questo motivo essi vengono assegnati in successione tutte le volte che si apre
+un nuovo file (se non ne è stato chiuso nessuno in precedenza).
 
 In tutti i sistemi unix-like esiste una convenzione generale per cui ogni
 processo viene lanciato con almeno tre file aperti. Questi, per quanto appena
 
 In tutti i sistemi unix-like esiste una convenzione generale per cui ogni
 processo viene lanciato con almeno tre file aperti. Questi, per quanto appena
-detto, avranno come \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à.
+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à.
 
 Il primo file è sempre associato a quello che viene chiamato \textit{standard
   input}. È cioè il file da cui il processo si aspetta di ricevere i dati in
 
 Il primo file è sempre associato a quello che viene chiamato \textit{standard
   input}. È cioè il file da cui il processo si aspetta di ricevere i dati in
@@ -137,10 +138,11 @@ posto di questi valori numerici:
   \label{tab:file_std_files}
 \end{table}
 
   \label{tab:file_std_files}
 \end{table}
 
-In \curfig\ si è utilizzata questa situazione come esempio, facendo
-riferimento ad un programma in cui lo \textit{standard input} è associato ad
-un file mentre lo \textit{standard output} e lo \textit{standard error} sono
-entrambi associati ad un altro file (e quindi utilizzano lo stesso inode).
+In \figref{tab:file_std_files} si è utilizzata questa situazione come esempio,
+facendo riferimento ad un programma in cui lo \textit{standard input} è
+associato ad un file mentre lo \textit{standard output} e lo \textit{standard
+  error} sono entrambi associati ad un altro file (e quindi utilizzano lo
+stesso inode).
 
 Nelle vecchie versioni di Unix (ed anche in Linux fino al kernel 2.0.x) il
 numero di file aperti era anche soggetto ad un limite massimo dato dalle
 
 Nelle vecchie versioni di Unix (ed anche in Linux fino al kernel 2.0.x) il
 numero di file aperti era anche soggetto ad un limite massimo dato dalle
@@ -182,8 +184,8 @@ prototipo 
   specificati da \var{mode}.
   
   \bodydesc{La funzione ritorna il file descriptor in caso di successo e -1 in
   specificati da \var{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} viene settata ad
-    uno dei valori:
+    caso di errore. In questo caso la variabile \var{errno} assumerà uno dei
+    valori:
   \begin{errlist}
   \item[\macro{EEXIST}] \var{pathname} esiste e si è specificato
     \macro{O\_CREAT} e \macro{O\_EXCL}.  
   \begin{errlist}
   \item[\macro{EEXIST}] \var{pathname} esiste e si è specificato
     \macro{O\_CREAT} e \macro{O\_EXCL}.  
@@ -191,7 +193,7 @@ prototipo 
     l'accesso in scrittura. 
   \item[\macro{ENOTDIR}] si è specificato \macro{O\_DIRECTORY} e \var{pathname}
     non è una directory.
     l'accesso in scrittura. 
   \item[\macro{ENOTDIR}] si è specificato \macro{O\_DIRECTORY} e \var{pathname}
     non è una directory.
-  \item[\macro{ENXIO}] si sono settati \macro{O\_NOBLOCK} o \macro{O\_WRONLY}
+  \item[\macro{ENXIO}] si sono impostati \macro{O\_NOBLOCK} o \macro{O\_WRONLY}
     ed il file è una fifo che non viene letta da nessun processo o
     \var{pathname} è un file di dispositivo ma il dispositivo è assente.
   \item[\macro{ENODEV}] \var{pathname} si riferisce a un file di dispositivo
     ed il file è una fifo che non viene letta da nessun processo o
     \var{pathname} è un file di dispositivo ma il dispositivo è assente.
   \item[\macro{ENODEV}] \var{pathname} si riferisce a un file di dispositivo
@@ -221,7 +223,7 @@ sempre il file descriptor con il valore pi
     \hline % modalità di accesso al file
     \macro{O\_RDONLY} & apre il file in sola lettura. \\
     \macro{O\_WRONLY} & apre il file in sola scrittura. \\
     \hline % modalità di accesso al file
     \macro{O\_RDONLY} & apre il file in sola lettura. \\
     \macro{O\_WRONLY} & apre il file in sola scrittura. \\
-    \macro{O\_RDWR} & apre il file lettura/scrittura. \\
+    \macro{O\_RDWR} & apre il file in lettura/scrittura. \\
     \hline % modalità di apertura del file
     \hline
     \macro{O\_CREAT} & se il file non esiste verrà creato, con le regole di
     \hline % modalità di apertura del file
     \hline
     \macro{O\_CREAT} & se il file non esiste verrà creato, con le regole di
@@ -232,11 +234,11 @@ sempre il file descriptor con il valore pi
     \func{open} con \macro{EEXIST}. \\
     \macro{O\_NONBLOCK} & apre il file in modalità non bloccante. Questo
     valore specifica anche una modalità di operazione (vedi sotto), e 
     \func{open} con \macro{EEXIST}. \\
     \macro{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 (torneremo su
-    questo in \secref{sec:file_noblocking}). \\
+    comporta che \func{open} ritorni immediatamente (l'opzione ha senso 
+    solo per le fifo, torneremo questo in \secref{sec:ipc_named_pipe}). \\
     \macro{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di
     terminale, questo non diventerà il terminale di controllo, anche se il
     \macro{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di
     terminale, questo non diventerà il terminale di controllo, anche se il
-    processo non ne ha ancora uno (si veda \secref{sec:sess_xxx}). \\
+    processo non ne ha ancora uno (si veda \secref{sec:sess_ctrl_term}). \\
     \macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
     \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
     \macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
     \macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
     \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
     \macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
@@ -251,7 +253,8 @@ sempre il file descriptor con il valore pi
     opzione è ignorata. \\
     \macro{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata
     fallisce. Questo flag è specifico di Linux ed è stato introdotto con il
     opzione è ignorata. \\
     \macro{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata
     fallisce. Questo flag è specifico di Linux ed è stato introdotto con il
-    kernel 2.1.126 per evitare dei DoS\protect\footnotemark\ quando 
+    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}. \\
     \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}. \\
@@ -261,18 +264,19 @@ sempre il file descriptor con il valore pi
     \hline
     \hline  % modalità di operazione col file
     \macro{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
     \hline
     \hline  % modalità di operazione col file
     \macro{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
-    scrittura la posizione corrente viene sempre settata alla fine del
+    scrittura la posizione corrente viene sempre impostata alla fine del
     file. Può causare corruzione del file con NFS se più di un processo scrive
     allo stesso tempo.\footnotemark\\
     \macro{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per
     file. Può causare corruzione del file con NFS se più di un processo scrive
     allo stesso tempo.\footnotemark\\
     \macro{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per
-    le operazioni di I/O: 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. L'opzione è effettiva solo per
-    le fifo e per alcuni file di dispositivo. \\
+    le operazioni di I/O (che tratteremo in \secref{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. \\
     \macro{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
     \macro{O\_NONBLOCK}.\\
     \macro{O\_ASYNC} & apre il file per l'I/O in modalità
     \macro{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
     \macro{O\_NONBLOCK}.\\
     \macro{O\_ASYNC} & apre il file per l'I/O in modalità
-    asincrona (vedi \secref{sec:file_asyncronous_io}). Quando è settato viene
+    asincrona (vedi \secref{sec:file_asyncronous_io}). Quando è impostato viene
     generato il segnale \macro{SIGIO} tutte le volte che sono disponibili
     dati in input sul file. \\ 
     \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni
     generato il segnale \macro{SIGIO} tutte le volte che sono disponibili
     dati in input sul file. \\ 
     \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni
@@ -289,15 +293,15 @@ sempre il file descriptor con il valore pi
   \label{tab:file_open_flags}
 \end{table}
 
   \label{tab:file_open_flags}
 \end{table}
 
-\footnotetext[2]{la man page di \func{open} segnala che questa opzione è
-  difettosa su NFS, e che i programmi che la usano per stabilire un file di
-  lock possono incorrere in una race condition.  Si consiglia come alternativa
-  di usare un file con un nome univoco e la funzione \func{link} per
-  verificarne l'esistenza.}  
+\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
+  file di lock possono incorrere in una race condition\index{race condition}.
+  Si consiglia come alternativa di usare un file con un nome univoco e la
+  funzione \func{link} per verificarne l'esistenza.}
 
 
-\footnotetext[3]{Denial of Service, 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[3]{\textit{Denial of Service}, 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
 
 \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
@@ -317,9 +321,9 @@ input (avr
 
 Il nuovo file descriptor non è condiviso con nessun altro processo, (torneremo
 sulla condivisione dei file, in genere accessibile dopo una \func{fork}, in
 
 Il nuovo file descriptor non è condiviso con nessun altro processo, (torneremo
 sulla condivisione dei file, in genere accessibile dopo una \func{fork}, in
-\secref{sec:file_sharing}). Il nuovo file descriptor è settato di default per
-restare aperto attraverso una \func{exec} (come accennato in
-\secref{sec:proc_exec}) e l'offset è settato all'inizio del file.
+\secref{sec:file_sharing}). Il nuovo file descriptor è impostato per restare
+aperto attraverso una \func{exec} (come accennato in \secref{sec:proc_exec}) e
+l'offset è impostato all'inizio del file.
 
 L'argomento \param{mode} specifica i permessi con cui il file viene
 eventualmente creato; i valori possibili sono gli stessi già visti in
 
 L'argomento \param{mode} specifica i permessi con cui il file viene
 eventualmente creato; i valori possibili sono gli stessi già visti in
@@ -332,12 +336,13 @@ La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
 il flag di stato del file (o \textit{file status flag}), che è mantenuto nel
 campo \var{f\_flags} della struttura \var{file} (al solito si veda lo schema
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
 il flag di stato del file (o \textit{file status flag}), che è mantenuto nel
 campo \var{f\_flags} della struttura \var{file} (al solito si veda lo schema
-di \curfig).  Essi sono divisi in tre categorie principali:
+di \figref{fig:file_proc_file}).  Essi sono divisi in tre categorie
+principali:
 \begin{itemize}
 \item \textsl{i bit delle modalità di accesso}: specificano con quale modalità
   si accederà al file: i valori possibili sono lettura, scrittura o
   lettura/scrittura.  Uno di questi bit deve essere sempre specificato quando
 \begin{itemize}
 \item \textsl{i bit delle modalità di accesso}: specificano con quale modalità
   si accederà al file: i valori possibili sono lettura, scrittura o
   lettura/scrittura.  Uno di questi bit deve essere sempre specificato quando
-  si apre un file.  Vengono settati alla chiamata da \func{open}, e possono
+  si apre un file.  Vengono impostati alla chiamata da \func{open}, e possono
   essere riletti con una \func{fcntl} (fanno parte del \textit{file status
     flag}), ma non possono essere modificati.
 \item \textsl{i bit delle modalità di apertura}: permettono di specificare
   essere riletti con una \func{fcntl} (fanno parte del \textit{file status
     flag}), ma non possono essere modificati.
 \item \textsl{i bit delle modalità di apertura}: permettono di specificare
@@ -347,7 +352,7 @@ di \curfig).  Essi sono divisi in tre categorie principali:
 \item \textsl{i bit delle modalità di operazione}: permettono di specificare
   alcune caratteristiche del comportamento delle future operazioni sul file
   (come la \func{read} o la \func{write}). Anch'essi fanno parte del
 \item \textsl{i bit delle modalità di operazione}: permettono di specificare
   alcune caratteristiche del comportamento delle future operazioni sul file
   (come la \func{read} o la \func{write}). Anch'essi fanno parte del
-  \textit{file status flag}. Il loro valore è settato alla chiamata di
+  \textit{file status flag}. Il loro valore è impostato alla chiamata di
   \func{open}, ma possono essere riletti e modificati (insieme alle
   caratteristiche operative che controllano) con una \func{fcntl}.
 \end{itemize}
   \func{open}, ma possono essere riletti e modificati (insieme alle
   caratteristiche operative che controllano) con una \func{fcntl}.
 \end{itemize}
@@ -383,7 +388,7 @@ descriptor ritorna disponibile; il suo prototipo 
   Chiude il descrittore \var{fd}. 
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
   Chiude il descrittore \var{fd}. 
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-    ed in questo caso \var{errno} è settata ai valori:
+    ed in questo caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
     \item[\macro{EBADF}]  \var{fd} non è un descrittore valido.
     \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
   \begin{errlist}
     \item[\macro{EBADF}]  \var{fd} non è un descrittore valido.
     \item[\macro{EINTR}] la funzione è stata interrotta da un segnale.
@@ -430,17 +435,17 @@ 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à \macro{O\_APPEND}) questa
 automaticamente spostata in avanti del numero di byte letti o scritti.
 
 In genere (a meno di non avere richiesto la modalità \macro{O\_APPEND}) questa
-posizione viene settata a zero all'apertura del file. È possibile settarla ad
+posizione viene impostata a zero all'apertura del file. È possibile impostarla ad
 un valore qualsiasi con la funzione \func{lseek}, il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{unistd.h}
   \funcdecl{off\_t lseek(int fd, off\_t offset, int whence)}
 un valore qualsiasi con la funzione \func{lseek}, il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{unistd.h}
   \funcdecl{off\_t lseek(int fd, off\_t offset, int whence)}
-  Setta la posizione attuale nel file. 
+  Imposta la posizione attuale nel file. 
   
   \bodydesc{La funzione ritorna valore della posizione corrente in caso di
   
   \bodydesc{La funzione ritorna valore della posizione corrente in caso di
-    successo e -1 in caso di errore nel qual caso \var{errno} viene settata ad
-    uno dei valori:
+    successo e -1 in caso di errore nel qual caso \var{errno} assumerà uno dei
+    valori:
   \begin{errlist}
     \item[\macro{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
     \item[\macro{EINVAL}] \param{whence} non è un valore valido.
   \begin{errlist}
     \item[\macro{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
     \item[\macro{EINVAL}] \param{whence} non è un valore valido.
@@ -448,7 +453,7 @@ un valore qualsiasi con la funzione \func{lseek}, il cui prototipo 
   ed inoltre \macro{EBADF}.}
 \end{functions}
 
   ed inoltre \macro{EBADF}.}
 \end{functions}
 
-La nuova posizione è settata usando il valore specificato da \param{offset},
+La nuova posizione è impostata usando il valore specificato da \param{offset},
 sommato al riferimento dato da \param{whence}; quest'ultimo può assumere i
 seguenti valori\footnote{per compatibilità con alcune vecchie notazioni
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
 sommato al riferimento dato da \param{whence}; quest'ultimo può assumere i
 seguenti valori\footnote{per compatibilità con alcune vecchie notazioni
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
@@ -463,7 +468,7 @@ seguenti valori\footnote{per compatibilit
 \end{basedescript}
 
 Come accennato in \secref{sec:file_file_size} con \func{lseek} è possibile
 \end{basedescript}
 
 Come accennato in \secref{sec:file_file_size} con \func{lseek} è possibile
-settare la posizione corrente anche al di la della fine del file, e alla
+impostare la posizione corrente anche al di la della fine del file, e alla
 successiva scrittura il file sarà esteso. La chiamata non causa nessuna
 attività di input/output, si limita a modificare la posizione corrente nel
 kernel (cioè \var{f\_pos} in \var{file}, vedi \figref{fig:file_proc_file}).
 successiva scrittura il file sarà esteso. La chiamata non causa nessuna
 attività di input/output, si limita a modificare la posizione corrente nel
 kernel (cioè \var{f\_pos} in \var{file}, vedi \figref{fig:file_proc_file}).
@@ -475,18 +480,19 @@ funzione con \code{lseek(fd, 0, SEEK\_CUR)}.
 Si tenga presente inoltre che usare \macro{SEEK\_END} non assicura affatto che
 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ò
 Si tenga presente inoltre che usare \macro{SEEK\_END} non assicura affatto che
 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 settata in precedenza.
-(questa è una potenziale sorgente di \textit{race condition}, vedi
-\secref{sec:file_atomic}).
+essersi spostata, ma noi scriveremo alla posizione impostata in precedenza.
+(questa è una potenziale sorgente di 
+\textit{race condition}\index{race condition}, vedi \secref{sec:file_atomic}).
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
 questo caso la funzione ritorna l'errore \macro{EPIPE}. Questo, oltre che per
 i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
 questo caso la funzione ritorna l'errore \macro{EPIPE}. Questo, oltre che per
 i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
-supportano questa funzione, come ad esempio per le \acr{tty}.\footnote{altri
-  sistemi, usando \macro{SEEK\_SET}, in questo caso ritornano il numero di
-  caratteri che vi sono stati scritti.} Lo standard POSIX però non specifica
-niente al proposito. Infine alcuni device, ad esempio \file{/dev/null}, non
-causano un errore ma restituiscono un valore indefinito.
+supportano questa funzione, come ad esempio per i file di
+terminale.\footnote{altri sistemi, usando \macro{SEEK\_SET}, in questo caso
+  ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
+POSIX però non specifica niente al proposito. Infine alcuni file speciali, ad
+esempio \file{/dev/null}, non causano un errore ma restituiscono un valore
+indefinito.
 
 
 \subsection{La funzione \func{read}}
 
 
 \subsection{La funzione \func{read}}
@@ -500,8 +506,7 @@ utilizzando la funzione \func{read}, il cui prototipo 
   Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{buf}.
   
   \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
   Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{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} viene settata ad uno dei
-    valori:
+    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\macro{EINTR}] la funzione è stata interrotta da un segnale prima di
     aver potuto leggere qualsiasi dato.
   \begin{errlist}
   \item[\macro{EINTR}] la funzione è stata interrotta da un segnale prima di
     aver potuto leggere qualsiasi dato.
@@ -562,16 +567,15 @@ allora ritorna immediatamente con un errore \macro{EAGAIN}\footnote{sotto BSD
   Linux, con le glibc, questa è sinonima di \macro{EAGAIN}.} che nel caso
 indica soltanto che occorrerà provare a ripetere la lettura.
 
   Linux, con le glibc, questa è sinonima di \macro{EAGAIN}.} che nel caso
 indica soltanto che occorrerà provare a ripetere la lettura.
 
-La funzione \func{read} è una delle system call esistenti fin dagli abori di
-Unix, ma nella seconda versione delle \textit{Single Unix
+La funzione \func{read} è una delle system call fondamentali, esistenti fin
+dagli albori di Unix, ma nella seconda versione delle \textit{Single Unix
   Specification}\footnote{questa funzione, e l'analoga \func{pwrite} sono
   state aggiunte nel kernel 2.1.60, il supporto nelle \acr{glibc}, compresa
   l'emulazione per i vecchi kernel che non hanno la system call, è stato
   aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
   delle librerie la funzione non è disponibile.} (quello che viene chiamato
 normalmente Unix98, vedi \secref{sec:intro_opengroup}) è stata introdotta la
   Specification}\footnote{questa funzione, e l'analoga \func{pwrite} sono
   state aggiunte nel kernel 2.1.60, il supporto nelle \acr{glibc}, compresa
   l'emulazione per i vecchi kernel che non hanno la system call, è stato
   aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
   delle librerie la funzione non è disponibile.} (quello che viene chiamato
 normalmente Unix98, vedi \secref{sec:intro_opengroup}) è stata introdotta la
-definizione di un'altra funzione di lettura, \func{pread}, il cui prototipo di
-questa funzione è:
+definizione di un'altra funzione di lettura, \func{pread}, il cui prototipo è:
 \begin{prototype}{unistd.h}
 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
 
 \begin{prototype}{unistd.h}
 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
 
@@ -579,8 +583,8 @@ Cerca di leggere \var{count} byte dal file \var{fd}, a partire dalla posizione
 \var{offset}, nel buffer \var{buf}.
   
 \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
 \var{offset}, nel buffer \var{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} viene settata secondo i valori
-  già visti per \func{read} e \func{lseek}.}
+  in caso di errore, nel qual caso \var{errno} assumerà i valori già visti per
+  \func{read} e \func{lseek}.}
 \end{prototype}
 \noindent che però diventa accessibile solo con la definizione della macro:
 \begin{verbatim}
 \end{prototype}
 \noindent che però diventa accessibile solo con la definizione della macro:
 \begin{verbatim}
@@ -606,8 +610,7 @@ funzione \func{write}, il cui prototipo 
   Scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
   
   \bodydesc{La funzione ritorna il numero di byte scritti in caso di successo
   Scrive \var{count} byte dal buffer \var{buf} sul file \var{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} viene settata ad uno dei
-    valori:
+    e -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\macro{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la
     scrittura.
   \begin{errlist}
   \item[\macro{EINVAL}] \var{fd} è connesso ad un oggetto che non consente la
     scrittura.
@@ -652,8 +655,8 @@ Cerca di scrivere sul file \var{fd}, a partire dalla posizione \var{offset},
 \var{count} byte dal buffer \var{buf}.
   
 \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e -1
 \var{count} byte dal buffer \var{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} viene settata secondo i valori
-  già visti per \func{write} e \func{lseek}.}
+  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}.
 
 \end{prototype}
 \noindent e per essa valgono le stesse considerazioni fatte per \func{pread}.
 
@@ -703,13 +706,13 @@ 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.
 \item se un file è in modalità \macro{O\_APPEND} tutte le volte che viene
   scrittura eccede la dimensione corrente del file questo verrà esteso
   automaticamente con l'aggiornamento del campo \var{i\_size} nell'inode.
 \item se un file è in modalità \macro{O\_APPEND} tutte le volte che viene
-  effettuata una scrittura la posizione corrente viene prima settata alla
+  effettuata una scrittura la posizione corrente viene prima impostata alla
   dimensione corrente del file letta dall'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 \var{file} della \textit{file table}, non c'è nessuna
   operazione sul file su disco. Quando la si usa per porsi alla fine del file
   dimensione corrente del file letta dall'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 \var{file} della \textit{file table}, non c'è nessuna
   operazione sul file su disco. Quando la si usa per porsi alla fine del file
-  la posizione viene settata leggendo la dimensione corrente dall'inode.
+  la posizione viene impostata leggendo la dimensione corrente dall'inode.
 \end{itemize}
 
 \begin{figure}[htb]
 \end{itemize}
 
 \begin{figure}[htb]
@@ -734,7 +737,7 @@ posizione corrente sul file. Questo ha le conseguenze descritte a suo tempo in
 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
 \var{f\_pos} che è la stesso per entrambi).
 
 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
 \var{f\_pos} che è la stesso per entrambi).
 
-Si noti inoltre che anche i flag di stato del file (quelli settati
+Si noti inoltre che anche i flag di stato del file (quelli impostati
 dall'argomento \param{flag} di \func{open}) essendo tenuti nella voce della
 \textit{file table}\footnote{per la precisione nel campo \var{f\_flags} di
   \var{file}.}, vengono in questo caso condivisi. Ai file però sono associati
 dall'argomento \param{flag} di \func{open}) essendo tenuti nella voce della
 \textit{file table}\footnote{per la precisione nel campo \var{f\_flags} di
   \var{file}.}, vengono in questo caso condivisi. Ai file però sono associati
@@ -763,13 +766,15 @@ utilizzare meccanismi di sincronizzazione pi
 
 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
 
 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 \secref{sec:file_lseek} settare la posizione alla fine
-del file e poi scrivere può condurre ad una \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 settata con la \func{lseek} che non corrisponde più alla fine del
-file, e la successiva \func{write} sovrascriverà i dati del secondo processo.
+log). Come accennato in \secref{sec:file_lseek} impostare la posizione alla fine
+del file e poi scrivere può condurre ad una 
+\textit{race condition}\index{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 \func{lseek} che non corrisponde più alla
+fine del file, e la successiva \func{write} sovrascriverà i dati del secondo
+processo.
 
 Il problema è che usare due system call in successione non è un'operazione
 atomica; il problema è stato risolto introducendo la modalità
 
 Il problema è che usare due system call in successione non è un'operazione
 atomica; il problema è stato risolto introducendo la modalità
@@ -783,8 +788,8 @@ Un altro caso tipico in cui 
 creare un 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
 creare un 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 da parte di un altro processo che crea lo
-stesso file fra il controllo e la creazione. 
+possibilità di una race condition\index{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 pe \func{open} i due flag
 \macro{O\_CREAT} e \macro{O\_EXCL}. In questo modo l'operazione di controllo
 
 Per questo motivo sono stati introdotti pe \func{open} i due flag
 \macro{O\_CREAT} e \macro{O\_EXCL}. In questo modo l'operazione di controllo
@@ -870,7 +875,7 @@ prototipo 
   Crea una copia del file descriptor \param{oldfd}.
   
   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
   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} viene settata ad uno dei
+    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei
     valori:
   \begin{errlist}
   \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
     valori:
   \begin{errlist}
   \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
@@ -923,8 +928,7 @@ prototipo 
   Rende \param{newfd} una copia del file descriptor \param{oldfd}.
   
   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
   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} viene settata ad uno dei
-    valori:
+    -1 in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\macro{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha un
     valore fuori dall'intervallo consentito per i file descriptor.
   \begin{errlist}
   \item[\macro{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha un
     valore fuori dall'intervallo consentito per i file descriptor.
@@ -932,8 +936,9 @@ prototipo 
     descriptor aperti.
   \end{errlist}}
 \end{prototype}
     descriptor aperti.
   \end{errlist}}
 \end{prototype}
-\noindent e qualora il  file descriptor \param{newfd} sia già aperto esso
-sarà chiuso e poi duplicato.
+\noindent e qualora il file descriptor \param{newfd} sia già aperto (come
+avviene ad esempio nel caso della duplicazione di uno dei file standard) esso
+sarà prima chiuso e poi duplicato.
 
 La duplicazione dei file descriptor può essere effettuata anche usando la
 funzione di controllo dei file \func{fnctl} (che esamineremo in
 
 La duplicazione dei file descriptor può essere effettuata anche usando la
 funzione di controllo dei file \func{fnctl} (che esamineremo in
@@ -964,11 +969,11 @@ file descriptor viene usata la funzione \func{fcntl} il cui prototipo 
   sul file \param{fd}.
   
   \bodydesc{La funzione ha valori di ritorno diversi a seconda
   sul file \param{fd}.
   
   \bodydesc{La funzione ha valori di ritorno diversi a seconda
-    dell'operazione. In caso di errore il valore di ritorno è -1 e la
-    variabile \var{errno} viene settata ad un opportuno codice, quelli validi
-    in generale sono:
+    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}
   \begin{errlist}
-  \item[\macro{EBADF}] \param{oldfd} non è un file aperto.
+  \item[\macro{EBADF}] \param{fd} non è un file aperto.
   \end{errlist}}
 \end{functions}
 
   \end{errlist}}
 \end{functions}
 
@@ -983,63 +988,69 @@ valori 
   \macro{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o
   \macro{EMFILE} se il processo ha già raggiunto il massimo numero di
   descrittori consentito.
   \macro{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o
   \macro{EMFILE} se il processo ha già raggiunto il massimo numero di
   descrittori consentito.
-\item[\macro{F\_SETFD}] setta il valore del \textit{file descriptor flag}
+\item[\macro{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}, identificato dalla costante
   \macro{FD\_CLOEXEC}.
 \item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
   al valore specificato con \param{arg}. Al momento l'unico bit usato è
   quello di \textit{close on exec}, identificato dalla costante
   \macro{FD\_CLOEXEC}.
 \item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
-  \var{fd}, se \macro{FD\_CLOEXEC} è settato i file descriptor aperti vengono
-  chiusi attraverso una \func{exec} altrimenti (il default) restano aperti.
+  \var{fd}, se \macro{FD\_CLOEXEC} è impostato i file descriptor aperti
+  vengono chiusi attraverso una \func{exec} altrimenti (il comportamento
+  predefinito) restano aperti.
 \item[\macro{F\_GETFL}] ritorna il valore del \textit{file status flag},
 \item[\macro{F\_GETFL}] ritorna il valore del \textit{file status flag},
-  permette cioè di rileggere quei bit settati da \func{open} all'apertura del
+  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 \tabref{tab:file_open_flags}). 
   file che vengono memorizzati (quelli riportati nella prima e terza sezione
   di \tabref{tab:file_open_flags}). 
-\item[\macro{F\_SETFL}] setta il \textit{file status flag} al valore
-  specificato da \param{arg}, possono essere settati solo i bit riportati
-  nella terza sezione di \tabref{tab:file_open_flags}.\footnote{NdA da
-    verificare.}
-\item[\macro{F\_GETLK}] se un file lock è attivo restituisce nella struttura
-  \param{lock} la struttura \type{flock} che impedisce l'acquisizione del
-  blocco, altrimenti setta il campo \var{l\_type} a \macro{F\_UNLCK} (per i
-  dettagli sul \textit{file locking} vedi \secref{sec:file_locking}).
-\item[\macro{F\_SETLK}] richiede il file lock specificato da \param{lock} se
-  \var{l\_type} è \macro{F\_RDLCK} o \macro{F\_WRLLCK} o lo rilascia se
-  \var{l\_type} è \macro{F\_UNLCK}. Se il lock è tenuto da qualcun'altro
-  ritorna immediatamente restituendo -1 e setta \var{errno} a \macro{EACCES} o
-  \macro{EAGAIN} (per i dettagli sul \textit{file locking} vedi
-  \secref{sec:file_locking}).
+\item[\macro{F\_SETFL}] imposta il \textit{file status flag} al valore
+  specificato da \param{arg}, possono essere impostati solo i bit riportati
+  nella terza sezione di \tabref{tab:file_open_flags}.\footnote{la pagina di
+    manuale riporta come impostabili solo \macro{O\_APPEND},
+    \macro{O\_NONBLOCK} e \macro{O\_ASYNC}.}
+\item[\macro{F\_GETLK}] richiede un controllo sul file lock specificato da
+  \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato
+  (questa funzionalità è trattata in dettaglio in
+  \secref{sec:file_posix_lock}).
+\item[\macro{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
+  \macro{EACCES} o \macro{EAGAIN} (questa funzionalità è trattata in dettaglio
+  in \secref{sec:file_posix_lock}).
 \item[\macro{F\_SETLKW}] identica a \macro{F\_SETLK} eccetto per il fatto che
   la funzione non ritorna subito ma attende che il blocco sia rilasciato. Se
 \item[\macro{F\_SETLKW}] identica a \macro{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 setta
-  \var{errno} a \macro{EINTR} (per i dettagli sul \textit{file locking} vedi
-  \secref{sec:file_locking}).
+  l'attesa viene interrotta da un segnale la funzione restituisce -1 e imposta
+  \var{errno} a \macro{EINTR} (questa funzionalità è trattata in dettaglio in
+  \secref{sec:file_posix_lock}).
 \item[\macro{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
   group che è preposto alla ricezione dei segnali \macro{SIGIO} e
   \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
   process group è restituito come valore negativo.
 \item[\macro{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
   group che è preposto alla ricezione dei segnali \macro{SIGIO} e
   \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
   process group è restituito come valore negativo.
-\item[\macro{F\_SETOWN}] setta il processo o process group che riceverà i
+\item[\macro{F\_SETOWN}] imposta il processo o process group che riceverà i
   segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
   segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
-  descriptor \var{fd}.  I process group sono settati usando valori negativi.
+  descriptor \var{fd}.  I process group sono impostati usando valori negativi.
 \item[\macro{F\_GETSIG}] restituisce il valore del segnale mandato quando ci
 \item[\macro{F\_GETSIG}] restituisce il valore del segnale mandato quando ci
-  sono dati disponibili in input su un file descriptor aperto o settato in I/O
-  asincrono. Il valore 0 indica il valore default (che è \macro{SIGIO}), un
-  valore diverso da zero indica il segnale richiesto, (che può essere lo
-  stesso \macro{SIGIO}).
-\item[\macro{F\_SETSIG}] setta il segnale da inviare quando diventa possibile
-  effettuare I/O sul file descriptor in caso di I/O asincrono. Il valore zero
-  indica di usare il segnale di default, \macro{SIGIO}. Un altro valore
-  (compreso lo stesso \macro{SIGIO}) specifica il segnale voluto; l'uso di un
-  valore diverso da zero permette inoltre, se si è installato il manipolatore
-  del segnale come \var{sa\_sigaction} usando \macro{SA\_SIGINFO}, (vedi
-  \secref{sec:sig_sigaction}), di rendere disponibili al manipolatore
-  informazioni ulteriori informazioni riguardo il file che ha generato il
-  segnale attraverso i valori restituiti in \var{siginfo\_t} (come vedremo in
-  \secref{sec:file_asyncronous_io}).
+  sono dati disponibili in input su un file descriptor aperto o impostato in
+  I/O asincrono. Il valore 0 indica il valore predefinito (che è
+  \macro{SIGIO}), un valore diverso da zero indica il segnale richiesto, (che
+  può essere lo stesso \macro{SIGIO}).
+\item[\macro{F\_SETSIG}] imposta il segnale da inviare quando diventa
+  possibile effettuare I/O sul file descriptor in caso di I/O asincrono. Il
+  valore zero indica di usare il segnale predefinito, \macro{SIGIO}. Un altro
+  valore (compreso lo stesso \macro{SIGIO}) specifica il segnale voluto; l'uso
+  di un valore diverso da zero permette inoltre, se si è installato il
+  manipolatore del segnale come \var{sa\_sigaction} usando
+  \macro{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere
+  disponibili al manipolatore informazioni ulteriori informazioni riguardo il
+  file che ha generato il segnale attraverso i valori restituiti in
+  \type{siginfo\_t} (come vedremo in
+  \secref{sec:file_asyncronous_io}).\footnote{i due comandi \macro{F\_SETSIG}
+    e \macro{F\_GETSIG} sono una estensione specifica di Linux.}
 \end{basedescript}
 
 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
 poter essere affrontate in dettaglio a questo punto; saranno riprese più
 \end{basedescript}
 
 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
 poter essere affrontate in dettaglio a questo punto; saranno riprese più
-avanti quando affronteremo le problematiche ad esse relative.
+avanti quando affronteremo le problematiche ad esse relative (in particolare
+riprenderemo le tematiche relative all'I/O asincrono in
+\secref{sec:file_asyncronous_io} e quelle relative al \textit{file locking} in
+\secref{sec:file_locking}).
 
 Per determinare le modalità di accesso inoltre è necessario estrarre i bit di
 accesso (ottenuti con il comando \macro{F\_GETFL}); infatti la definizione
 
 Per determinare le modalità di accesso inoltre è necessario estrarre i bit di
 accesso (ottenuti con il comando \macro{F\_GETFL}); infatti la definizione
@@ -1059,7 +1070,7 @@ valido anche per l'interazione con i pi
 interagire con le stesse funzioni usate per i normali file di dati,
 esisteranno sempre caratteristiche peculiari, specifiche dell'hardware e della
 funzionalità che ciascuno di essi provvede, che non possono venire comprese in
 interagire con le stesse funzioni usate per i normali file di dati,
 esisteranno sempre caratteristiche peculiari, specifiche dell'hardware e della
 funzionalità che ciascuno di essi provvede, che non possono venire comprese in
-questa interfaccia astratta (un caso tipico è il settaggio della velocità di
+questa interfaccia astratta (un caso tipico è l'impostazione della velocità di
 una porta seriale, o le dimensioni di un framebuffer).
 
 Per questo motivo l'architettura del sistema ha previsto l'esistenza di una
 una porta seriale, o le dimensioni di un framebuffer).
 
 Per questo motivo l'architettura del sistema ha previsto l'esistenza di una
@@ -1073,8 +1084,8 @@ per ogni singolo dispositivo.  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
   
   \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 e \var{errno} viene settata ad
-    uno dei valori seguenti:
+    caso di errore viene sempre restituito -1 ed \var{errno} assumerà uno dei
+    valori:
   \begin{errlist}
   \item[\macro{ENOTTY}] il file \param{fd} non è associato con un device, o la
     richiesta non è applicabile all'oggetto a cui fa riferimento \param{fd}.
   \begin{errlist}
   \item[\macro{ENOTTY}] il file \param{fd} non è associato con un device, o la
     richiesta non è applicabile all'oggetto a cui fa riferimento \param{fd}.
@@ -1095,8 +1106,8 @@ sia attraverso il valore di ritorno che attraverso il terzo argomento
 \item l'esecuzione di una traccia audio di un CDROM.
 \item i comandi di avanti veloce e riavvolgimento di un nastro.
 \item il comando di espulsione di un dispositivo rimovibile.
 \item l'esecuzione di una traccia audio di un CDROM.
 \item i comandi di avanti veloce e riavvolgimento di un nastro.
 \item il comando di espulsione di un dispositivo rimovibile.
-\item il settaggio della velocità trasmissione di una linea seriale.
-\item il settaggio della frequenza e della durata dei suoni emessi dallo
+\item l'impostazione della velocità trasmissione di una linea seriale.
+\item l'impostazione della frequenza e della durata dei suoni emessi dallo
   speaker.
 \end{itemize*}
 
   speaker.
 \end{itemize*}
 
@@ -1119,10 +1130,10 @@ specifici (ad esempio la gestione dei terminali 
 \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo i
 valori che sono definiti per ogni file:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo i
 valori che sono definiti per ogni file:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{FIOCLEX}] Setta il bit di \textit{close on exec}.
+\item[\macro{FIOCLEX}] Imposta il bit di \textit{close on exec}.
 \item[\macro{FIONCLEX}] Cancella il bit di \textit{close on exec}.
 \item[\macro{FIOASYNC}] Abilita l'I/O asincrono.
 \item[\macro{FIONCLEX}] Cancella il bit di \textit{close on exec}.
 \item[\macro{FIOASYNC}] Abilita l'I/O asincrono.
-\item[\macro{FIONBIO}] Abilità l'I/O in modalità non bloccante.
+\item[\macro{FIONBIO}] Abilita l'I/O in modalità non bloccante.
 \end{basedescript}
 relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}.
 
 \end{basedescript}
 relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}.