Una lunga serie di modifiche per tenere conto della riorganizzazione della
[gapil.git] / fileunix.tex
index 5decd4994f91e0aa80b9e216dee0864c46d77e8f..782afc976b1323f9208a209d80099bb82b66e033 100644 (file)
@@ -1,6 +1,6 @@
 %% fileunix.tex
 %%
 %% fileunix.tex
 %%
-%% Copyright (C) 2000-2002 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2003 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 "Prefazione",
 %% 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 "Prefazione",
@@ -336,20 +336,17 @@ descriptor che si otterr
 alcune applicazioni per sostituire i file corrispondenti ai file standard
 visti in \secref{sec:file_std_descr}: se ad esempio si chiude lo standard
 input e si apre subito dopo un nuovo file questo diventerà il nuovo standard
 alcune applicazioni per sostituire i file corrispondenti ai file standard
 visti in \secref{sec:file_std_descr}: se ad esempio si chiude lo standard
 input e si apre subito dopo un nuovo file questo diventerà il nuovo standard
-input (avrà cioè il file descriptor 0).
-
-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 è 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
-\secref{sec:file_perm_overview} e possono essere specificati come OR binario
-delle costanti descritte in \tabref{tab:file_bit_perm}. Questi permessi sono
-filtrati dal valore di \var{umask} (vedi \secref{sec:file_umask}) per il
-processo.
+input (avrà cioè il file descriptor 0).  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}) ed è
+impostato per restare aperto attraverso una \func{exec} (come accennato in
+\secref{sec:proc_exec}); l'offset è impostato all'inizio del file.
+
+L'argomento \param{mode} indica i permessi con cui il file viene creato; i
+valori possibili sono gli stessi già visti in \secref{sec:file_perm_overview}
+e possono essere specificati come OR binario delle costanti descritte in
+\tabref{tab:file_bit_perm}. Questi permessi sono filtrati dal valore di
+\var{umask} (vedi \secref{sec:file_umask}) per il processo.
 
 La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
 
 La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
@@ -357,33 +354,33 @@ il flag di stato del file (o \textit{file status flag}), che 
 campo \var{f\_flags} della struttura \struct{file} (al solito si veda lo schema
 di \figref{fig:file_proc_file}).  Essi sono divisi in tre categorie
 principali:
 campo \var{f\_flags} della struttura \struct{file} (al solito si veda lo schema
 di \figref{fig:file_proc_file}).  Essi sono divisi in tre categorie
 principali:
-\begin{itemize}
+\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 impostati alla chiamata da \func{open}, e possono
 \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 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.
+  essere riletti con \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
   alcune delle caratteristiche del comportamento di \func{open} quando viene
   eseguita. Hanno effetto solo al momento della chiamata della funzione e non
   sono memorizzati né possono essere riletti.
 \item \textsl{i bit delle modalità di operazione}: permettono di specificare
   alcune caratteristiche del comportamento delle future operazioni sul file
 \item \textsl{i bit delle modalità di apertura}: permettono di specificare
   alcune delle caratteristiche del comportamento di \func{open} quando viene
   eseguita. Hanno effetto solo al momento della chiamata della funzione e non
   sono memorizzati né possono essere riletti.
 \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 è impostato alla chiamata di
-  \func{open}, ma possono essere riletti e modificati (insieme alle
-  caratteristiche operative che controllano) con una \func{fcntl}.
-\end{itemize}
+  (come \func{read} o \func{write}). Anch'essi fan parte del \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*}
 
 
-In \tabref{tab:file_open_flags} si sono riportate, ordinate e divise fra loro
+In \tabref{tab:file_open_flags} sono riportate, ordinate e divise fra loro
 secondo le tre modalità appena elencate, le costanti mnemoniche associate a
 secondo le tre modalità appena elencate, le costanti mnemoniche associate a
-ciascuno di questi bit. Dette costanti possono essere combinate fra di loro
-con un OR aritmetico per costruire il valore (in forma di maschera binaria)
-dell'argomento \param{flags} da passare alla \func{open} per specificarne il
-comportamento. I due flag \const{O\_NOFOLLOW} e \const{O\_DIRECTORY} sono
-estensioni specifiche di Linux, e deve essere definita la macro
-\macro{\_GNU\_SOURCE} per poterli usare.
+ciascuno di questi bit. Dette costanti possono essere combinate fra loro con
+un OR aritmetico per costruire il valore (in forma di maschera binaria)
+dell'argomento \param{flags} da passare alla \func{open}. I due flag
+\const{O\_NOFOLLOW} e \const{O\_DIRECTORY} sono estensioni specifiche di
+Linux, e deve essere definita la macro \macro{\_GNU\_SOURCE} per poterli
+usare.
 
 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
 \func{open} erano solo quelli relativi alle modalità di accesso del file.  Per
 
 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
 \func{open} erano solo quelli relativi alle modalità di accesso del file.  Per
@@ -407,7 +404,7 @@ descriptor ritorna disponibile; il suo prototipo 
   Chiude il descrittore \param{fd}. 
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
   Chiude il descrittore \param{fd}. 
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
-    ed in questo caso \var{errno} assumerà uno dei valori:
+    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.
   \begin{errlist}
     \item[\errcode{EBADF}]  \param{fd} non è un descrittore valido.
     \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
@@ -492,20 +489,19 @@ seguenti valori\footnote{per compatibilit
 
 Come accennato in \secref{sec:file_file_size} con \func{lseek} è possibile
 impostare la posizione corrente anche oltre la fine del file, e alla
 
 Come accennato in \secref{sec:file_file_size} con \func{lseek} è possibile
 impostare la posizione corrente anche oltre la 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 \param{file}, vedi \figref{fig:file_proc_file}).
-
-Dato che la funzione ritorna la nuova posizione, usando il valore zero per
-\param{offset} si può riottenere la posizione corrente nel file chiamando la
-funzione con \code{lseek(fd, 0, SEEK\_CUR)}. 
+successiva scrittura il file sarà esteso. La chiamata non causa nessun accesso
+al file, si limita a modificare la posizione corrente (cioè il valore
+\var{f\_pos} in \param{file}, vedi \figref{fig:file_proc_file}).  Dato che la
+funzione ritorna la nuova posizione, usando il valore zero per \param{offset}
+si può riottenere la posizione corrente nel file chiamando la funzione con
+\code{lseek(fd, 0, SEEK\_CUR)}.
 
 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
 
 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{race condition}, vedi \secref{sec:file_atomic}).
+(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 \errcode{EPIPE}. Questo, oltre che per
 
 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
@@ -546,24 +542,21 @@ prototipo 
 La funzione tenta di leggere \param{count} byte a partire dalla posizione
 corrente nel file. Dopo la lettura la posizione sul file è spostata
 automaticamente in avanti del numero di byte letti. Se \param{count} è zero la
 La funzione tenta di leggere \param{count} byte a partire dalla posizione
 corrente nel file. Dopo la lettura la posizione sul file è spostata
 automaticamente in avanti del numero di byte letti. Se \param{count} è zero la
-funzione restituisce zero senza nessun altro risultato.
-
-Si deve sempre tener presente che non è detto che la funzione \func{read}
-restituisca sempre il numero di byte richiesto, ci sono infatti varie ragioni
-per cui la funzione può restituire un numero di byte inferiore; questo è un
-comportamento normale, e non un errore, che bisogna sempre tenere presente.
+funzione restituisce zero senza nessun altro risultato.  Si deve sempre tener
+presente che non è detto che la funzione \func{read} restituisca sempre il
+numero di byte richiesto, ci sono infatti varie ragioni per cui la funzione
+può restituire un numero di byte inferiore; questo è un comportamento normale,
+e non un errore, che bisogna sempre tenere presente.  
 
 La prima e più ovvia di queste ragioni è che si è chiesto di leggere più byte
 di quanto il file ne contenga. In questo caso il file viene letto fino alla
 sua fine, e la funzione ritorna regolarmente il numero di byte letti
 
 La prima e più ovvia di queste ragioni è che si è chiesto di leggere più byte
 di quanto il file ne contenga. In questo caso il file viene letto fino alla
 sua fine, e la funzione ritorna regolarmente il numero di byte letti
-effettivamente. 
-
-Raggiunta la fine del file, alla ripetizione di un'operazione di lettura,
-otterremmo il ritorno immediato di \func{read} con uno zero.  La condizione di
-raggiungimento della fine del file non è un errore, e viene segnalata appunto
-da un valore di ritorno di \func{read} nullo. Ripetere ulteriormente la
-lettura non avrebbe nessun effetto se non quello di continuare a ricevere zero
-come valore di ritorno.
+effettivamente. Raggiunta la fine del file, alla ripetizione di un'operazione
+di lettura, otterremmo il ritorno immediato di \func{read} con uno zero.  La
+condizione di raggiungimento della fine del file non è un errore, e viene
+segnalata appunto da un valore di ritorno di \func{read} nullo. Ripetere
+ulteriormente la lettura non avrebbe nessun effetto se non quello di
+continuare a ricevere zero come valore di ritorno.
 
 Con i \textsl{file regolari} questa è l'unica situazione in cui si può avere
 un numero di byte letti inferiore a quello richiesto, ma questo non è vero
 
 Con i \textsl{file regolari} questa è l'unica situazione in cui si può avere
 un numero di byte letti inferiore a quello richiesto, ma questo non è vero
@@ -577,20 +570,19 @@ con un numero di byte inferiore a quelli richiesti.
 Lo stesso comportamento avviene caso di lettura dalla rete (cioè su un
 socket\index{socket}, come vedremo in \secref{sec:sock_io_behav}), o per la
 lettura da certi file di dispositivo, come le unità a nastro, che
 Lo stesso comportamento avviene caso di lettura dalla rete (cioè su un
 socket\index{socket}, come vedremo in \secref{sec:sock_io_behav}), o per la
 lettura da certi file di dispositivo, come le unità a nastro, che
-restituiscono sempre i dati ad un singolo blocco alla volta.
+restituiscono sempre i dati ad un singolo blocco alla volta.  
 
 In realtà anche le due condizioni segnalate dagli errori \errcode{EINTR} e
 \errcode{EAGAIN} non sono errori. La prima si verifica quando la \func{read} è
 bloccata in attesa di dati in ingresso e viene interrotta da un segnale; in
 tal caso l'azione da intraprendere è quella di rieseguire la funzione.
 
 In realtà anche le due condizioni segnalate dagli errori \errcode{EINTR} e
 \errcode{EAGAIN} non sono errori. La prima si verifica quando la \func{read} è
 bloccata in attesa di dati in ingresso e viene interrotta da un segnale; in
 tal caso l'azione da intraprendere è quella di rieseguire la funzione.
-Torneremo in dettaglio sull'argomento in \secref{sec:sig_gen_beha}.
-
-La seconda si verifica quando il file è in modalità non bloccante (vedi
+Torneremo in dettaglio sull'argomento in \secref{sec:sig_gen_beha}.  La
+seconda si verifica quando il file è in modalità non bloccante (vedi
 \secref{sec:file_noblocking}) e non ci sono dati in ingresso: la funzione
 \secref{sec:file_noblocking}) e non ci sono dati in ingresso: la funzione
-allora ritorna immediatamente con un errore \errcode{EAGAIN}\footnote{sotto
-  BSD per questo errore viene usata la costante \errcode{EWOULDBLOCK}, in
-  Linux, con le glibc, questa è sinonima di \errcode{EAGAIN}.} che indica
-soltanto che occorrerà provare a ripetere la lettura.
+allora ritorna immediatamente con un errore \errcode{EAGAIN}\footnote{BSD usa
+  per questo errore la costante \errcode{EWOULDBLOCK}, in Linux, con le
+  \acr{glibc}, questa è sinonima di \errcode{EAGAIN}.} che indica soltanto che
+occorrerà provare a ripetere la lettura.
 
 La funzione \func{read} è una delle system call fondamentali, esistenti fin
 dagli albori 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
@@ -613,7 +605,7 @@ posizione \param{offset}, nel buffer \param{buf}.
 \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}
-       #define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 500
 \end{verbatim}
 
 Questa funzione serve quando si vogliono leggere dati dal file senza
 \end{verbatim}
 
 Questa funzione serve quando si vogliono leggere dati dal file senza
@@ -646,10 +638,10 @@ scrivere su di esso utilizzando la funzione \funcd{write}, il cui prototipo 
     chiuso in lettura; in questo caso viene anche generato il segnale
     \const{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
     funzione ritorna questo errore.
     chiuso in lettura; in questo caso viene anche generato il segnale
     \const{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
     funzione ritorna questo errore.
-  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
-    aver potuto scrivere qualsiasi dato.
-  \item[\errcode{EAGAIN}] la funzione non aveva nessun dato da restituire e si
-    era aperto il file in modalità \const{O\_NONBLOCK}.
+  \item[\errcode{EINTR}] si è stati interrotti da un segnale prima di aver
+    potuto scrivere qualsiasi dato.
+  \item[\errcode{EAGAIN}] ci si sarebbe bloccati, ma il file era aperto in
+    modalità \const{O\_NONBLOCK}.
   \end{errlist}
   ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF},
   \errval{ENOSPC}, \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori
   \end{errlist}
   ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF},
   \errval{ENOSPC}, \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori
@@ -1000,13 +992,13 @@ tutta una serie di operazioni ausiliarie che 
 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
 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 l'I/O asincrono (vedi
-  \secref{sec:file_asyncronous_io}) e il file locking\index{file!locking}
-  (vedi \secref{sec:file_locking}).}
+  gestiscono con questa funzione varie modalità di I/O asincrono (vedi
+  \secref{sec:file_asyncronous_operation}) e il file
+  locking\index{file!locking} (vedi \secref{sec:file_locking}).}
 
 
-Per queste operazioni di manipolazione e di controllo su proprietà e
-caratteristiche un file descriptor, viene usata la funzione \funcd{fcntl}, il
-cui prototipo è:
+Per queste operazioni di manipolazione e di controllo delle varie proprietà e
+caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl},
+il cui prototipo è:
 \begin{functions}
   \headdecl{unistd.h}
   \headdecl{fcntl.h}
 \begin{functions}
   \headdecl{unistd.h}
   \headdecl{fcntl.h}
@@ -1025,92 +1017,127 @@ cui prototipo 
   \end{errlist}}
 \end{functions}
 
   \end{errlist}}
 \end{functions}
 
-Il comportamento di questa funzione è determinato dal valore del comando
-\param{cmd} che le viene fornito; in \secref{sec:file_dup} abbiamo incontrato
-un esempio per la duplicazione dei file descriptor, una lista dei possibili
-valori è riportata di seguito:
+
+Il primo argomento della funzione è sempre il numero di file descriptor
+\var{fd} su cui si vuole operare. Il comportamento di questa funzione, il
+numero e il tipo degli argomenti, il valore di ritorno e gli eventuali errori
+sono determinati dal valore dell'argomento \param{cmd} che in sostanza
+corrisponde all'esecuzione di un determinato \textsl{comando}; in
+\secref{sec:file_dup} abbiamo incontrato un esempio dell'uso di \func{fcntl}
+per la duplicazione dei file descriptor, una lista di tutti i possibili valori
+per \var{cmd} è riportata di seguito:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore
 \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}. In caso di
-  successo ritorna il nuovo file descriptor. 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.
+  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
+  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{close-on-exec}, identificato dalla costante
   \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
 \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{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 \secref{sec:proc_exec}).
+  esecuzione di una \func{exec} (vedi \secref{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
 \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
-  \param{fd}, 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},
-  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}). 
+  \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
+  (quelli riportati nella prima e terza sezione di
+  \tabref{tab:file_open_flags}).
 \item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore
 \item[\const{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 \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 \tabref{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
 \item[\const{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}).
+  \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 \secref{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
 \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
-  \errcode{EACCES} o \errcode{EAGAIN} (questa funzionalità è trattata in
-  dettaglio in \secref{sec:file_posix_lock}).
+  \errcode{EACCES} o \errcode{EAGAIN}, in caso di successo ritorna un valore
+  nullo. Questa funzionalità è trattata in dettaglio in
+  \secref{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
 \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} (questa funzionalità è trattata in dettaglio in
-  \secref{sec:file_posix_lock}).
+  \var{errno} a \errcode{EINTR}, in caso di successo ritorna un valore nullo.
+  Questa funzionalità è trattata in dettaglio in \secref{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
 \item[\const{F\_GETOWN}] restituisce il \acr{pid} del processo o
   l'identificatore del process group\footnote{i \texttt{process group} sono
-    (vedi \secref{sec:sess_proc_group}) sono 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.
+    (vedi \secref{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.
 \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
 \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}.  Come per \const{F\_GETOWN}, per impostare un process
-  group si deve usare per \param{arg} un valore negativo, il cui valore
-  assoluto corrisponde all'identificatore del process group.
+  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}.
 \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 \secref{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
 \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 \secref{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}).
+  \const{SIGIO}). In caso di errore ritorna -1.
 \item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa
 \item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa
-  possibile effettuare I/O sul file descriptor in caso di I/O asincrono. Il
+  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
   valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
   valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
-  valore (compreso lo stesso \const{SIGIO}) specifica il segnale voluto; l'uso
-  di un valore diverso da zero permette inoltre, se si è installato il
-  gestore del segnale come \var{sa\_sigaction} usando
+  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 è
+  installato il gestore del segnale come \var{sa\_sigaction} usando
   \const{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere
   \const{SA\_SIGINFO}, (vedi \secref{sec:sig_sigaction}), di rendere
-  disponibili al gestore informazioni ulteriori informazioni riguardo il
-  file che ha generato il segnale attraverso i valori restituiti in
-  \struct{siginfo\_t} (come vedremo in
-  \secref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG}
-    e \const{F\_GETSIG} sono una estensione specifica di Linux.}
+  disponibili al gestore informazioni ulteriori riguardo il file che ha
+  generato il segnale attraverso i valori restituiti in \struct{siginfo\_t}
+  (come vedremo in \secref{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 \secref{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
+  funzionalità avanzata è trattata in dettaglio in
+  \secref{sec:file_asyncronous_operation}.
+\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
+  di errore. Questa funzionalità avanzata, disponibile dai kernel della serie
+  2.4.x, è trattata in dettaglio in \secref{sec:file_asyncronous_operation}.
 \end{basedescript}
 
 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
 \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 (in particolare
-le tematiche relative all'I/O asincrono sono trattate in maniera esaustiva in
-\secref{sec:file_asyncronous_io} mentre quelle relative al \textit{file
+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
+\secref{sec:file_asyncronous_operation} mentre quelle relative al \textit{file
   locking}\index{file!locking} saranno esaminate in
 \secref{sec:file_locking}).
 
   locking}\index{file!locking} saranno esaminate in
 \secref{sec:file_locking}).
 
+
 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
 comando \const{F\_GETFL}) è necessario estrarre i bit corrispondenti nel
 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
 comando \const{F\_GETFL}) è necessario estrarre i bit corrispondenti nel