Ulteriori correzioni da D. Masini
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 25 Nov 2002 00:20:07 +0000 (00:20 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 25 Nov 2002 00:20:07 +0000 (00:20 +0000)
filedir.tex
fileunix.tex

index 3774978bdcb7d3256d2f3e29053d08b1a84abb56..ac0a3bc57b47947d33708bf115c07ebdde9236a7 100644 (file)
@@ -1181,20 +1181,6 @@ archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni
 \cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
 nell'ultima colonna di \tabref{tab:file_file_times}.
 
 \cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
 nell'ultima colonna di \tabref{tab:file_file_times}.
 
-L'effetto delle varie funzioni di manipolazione dei file sui tempi è
-illustrato in \tabref{tab:file_times_effects}. Si sono riportati gli effetti
-sia per il file a cui si fa riferimento, sia per la directory che lo contiene;
-questi ultimi possono essere capiti se si tiene conto di quanto già detto, e
-cioè che anche le directory sono file (che contengono una lista di nomi) che
-il sistema tratta in maniera del tutto analoga a tutti gli altri.
-
-Per questo motivo tutte le volte che compiremo un'operazione su un file che
-comporta una modifica del nome contenuto nella directory, andremo anche a
-scrivere sulla directory che lo contiene cambiandone il tempo di modifica. Un
-esempio di questo può essere la cancellazione di un file, invece leggere o
-scrivere o cambiare i permessi di un file ha effetti solo sui tempi di
-quest'ultimo.
-
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -1268,6 +1254,20 @@ quest'ultimo.
   \label{tab:file_times_effects}  
 \end{table}
 
   \label{tab:file_times_effects}  
 \end{table}
 
+L'effetto delle varie funzioni di manipolazione dei file sui tempi è
+illustrato in \tabref{tab:file_times_effects}. Si sono riportati gli effetti
+sia per il file a cui si fa riferimento, sia per la directory che lo contiene;
+questi ultimi possono essere capiti se si tiene conto di quanto già detto, e
+cioè che anche le directory sono file (che contengono una lista di nomi) che
+il sistema tratta in maniera del tutto analoga a tutti gli altri.
+
+Per questo motivo tutte le volte che compiremo un'operazione su un file che
+comporta una modifica del nome contenuto nella directory, andremo anche a
+scrivere sulla directory che lo contiene cambiandone il tempo di modifica. Un
+esempio di questo può essere la cancellazione di un file, invece leggere o
+scrivere o cambiare i permessi di un file ha effetti solo sui tempi di
+quest'ultimo.
+
 Si noti infine come \var{st\_ctime} non abbia nulla a che fare con il tempo di
 creazione del file, usato in molti altri sistemi operativi, ma che in Unix non
 esiste. Per questo motivo quando si copia un file, a meno di preservare
 Si noti infine come \var{st\_ctime} non abbia nulla a che fare con il tempo di
 creazione del file, usato in molti altri sistemi operativi, ma che in Unix non
 esiste. Per questo motivo quando si copia un file, a meno di preservare
@@ -1982,14 +1982,13 @@ da poter fornire un quadro d'insieme.
 In \tabref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari bit
 per un file; per quanto riguarda l'applicazione dei permessi per proprietario,
 gruppo ed altri si ricordi quanto illustrato in
 In \tabref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari bit
 per un file; per quanto riguarda l'applicazione dei permessi per proprietario,
 gruppo ed altri si ricordi quanto illustrato in
-\secref{sec:file_perm_overview}.  Per compattezza nella tabella si sono
-specificati i bit di \acr{suid}, \acr{sgid} e \acr{stiky} con la notazione
-illustrata anche in \figref{fig:file_perm_bit}.
+\secref{sec:file_perm_overview}. Si rammenti che il valore dei permessi non ha
+alcun effetto qualora il processo possieda i privilegi di amministratore.
 
 \begin{table}[!htb]
   \centering
   \footnotesize
 
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|}
+  \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|l|}
     \hline
     \multicolumn{3}{|c|}{}&
     \multicolumn{3}{|c|}{user}&
     \hline
     \multicolumn{3}{|c|}{}&
     \multicolumn{3}{|c|}{user}&
@@ -2003,15 +2002,15 @@ illustrata anche in \figref{fig:file_perm_bit}.
     1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\
     -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\
     -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
     1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\
     -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\
     -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
-    -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\
-    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\
-    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\
+    -&-&1&-&-&-&-&-&-&-&-&-&Non utilizzato\\
+    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il proprietario\\
+    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo proprietario\\
     -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
     -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\
-    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\
+    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il proprietario\\
+    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo proprietario\\
     -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
     -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\
+    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il proprietario\\
+    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo proprietario\\
     -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
     \hline
   \end{tabular}
     -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
     \hline
   \end{tabular}
@@ -2020,15 +2019,19 @@ illustrata anche in \figref{fig:file_perm_bit}.
   \label{tab:file_fileperm_bits}
 \end{table}
 
   \label{tab:file_fileperm_bits}
 \end{table}
 
-In \tabref{tab:file_dirperm_bits} si sono riassunti gli effetti dei vari bit
-per una directory; anche in questo caso si sono specificati i bit di
-\acr{suid}, \acr{sgid} e \acr{stiky} con la notazione illustrata anche in
+Per compattezza, nella tabella si sono specificati i bit di \acr{suid},
+\acr{sgid} e \acr{stiky} con la notazione illustrata anche in
 \figref{fig:file_perm_bit}. 
 
 \figref{fig:file_perm_bit}. 
 
+In \tabref{tab:file_dirperm_bits} si sono invece riassunti gli effetti dei
+vari bit dei permessi per una directory; anche in questo caso si sono
+specificati i bit di \acr{suid}, \acr{sgid} e \acr{stiky} con la notazione
+compatta illustrata in \figref{fig:file_perm_bit}.
+
 \begin{table}[!htb]
   \centering
   \footnotesize
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|}
+  \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|l|}
     \hline
     \multicolumn{3}{|c|}{}&
     \multicolumn{3}{|c|}{user}&
     \hline
     \multicolumn{3}{|c|}{}&
     \multicolumn{3}{|c|}{user}&
@@ -2039,19 +2042,18 @@ per una directory; anche in questo caso si sono specificati i bit di
     \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
     \hline
     \hline
     \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
     \hline
     \hline
-    1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\
-    -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\
-    -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
-    -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\
-    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\
-    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\
-    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\
-    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\
-    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\
-    -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
+    1&-&-&-&-&-&-&-&-&-&-&-&Non utilizzato\\
+    -&1&-&-&-&-&-&-&-&-&-&-&Propaga il gruppo proprietario ai nuovi file creati\\
+    -&-&1&-&-&-&-&-&-&-&-&-&Limita l'accesso in scrittura dei file nella directory\\
+    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di visualizzazione per il proprietario\\
+    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di visualizzazione per il gruppo proprietario\\
+    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di visualizzazione per tutti gli altri\\
+    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di aggiornamento per il proprietario\\
+    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di aggiornamento per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di aggiornamento per tutti gli altri \\
+    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di attraversamento per il proprietario\\
+    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di attraversamento per il gruppo proprietario\\
+    -&-&-&-&-&-&-&-&-&-&-&1&Permesso di attraversamento per tutti gli altri\\
     \hline
   \end{tabular}
   \caption{Tabella riassuntiva del significato dei bit dei permessi per una
     \hline
   \end{tabular}
   \caption{Tabella riassuntiva del significato dei bit dei permessi per una
@@ -2059,6 +2061,11 @@ per una directory; anche in questo caso si sono specificati i bit di
   \label{tab:file_dirperm_bits}
 \end{table}
 
   \label{tab:file_dirperm_bits}
 \end{table}
 
+Nelle tabelle si è indicato con $-$ il fatto che il valore degli altri bit non
+è influente rispetto a quanto indicato in ciascuna riga; l'operazione fa
+riferimento soltanto alla combinazione di bit per i quali il valore è
+riportato esplicitamente.
+
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
index 0f1f22565e8b03ade3c9d2da68ed57478b015c30..df4bfb9f51b00d19498ca60abd8ed6c4c91a8274 100644 (file)
@@ -320,7 +320,7 @@ 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).
 
 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
+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
 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
@@ -364,7 +364,7 @@ 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 \macro{O\_NOFOLLOW} e \macro{O\_DIRECTORY} sono
 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 \macro{O\_NOFOLLOW} e \macro{O\_DIRECTORY} sono
-estensioni specifiche di Linux, e deve essere usata definita la macro
+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
 \macro{\_GNU\_SOURCE} per poterli usare.
 
 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
@@ -373,7 +373,7 @@ questo motivo per creare un nuovo file c'era una system call apposita,
 \func{creat}, il cui prototipo è:
 \begin{prototype}{fcntl.h}
   {int creat(const char *pathname, mode\_t mode)}
 \func{creat}, il cui prototipo è:
 \begin{prototype}{fcntl.h}
   {int creat(const char *pathname, mode\_t mode)}
-  Crea un nuovo file vuoto, con i permessi specificati da \var{mode}. É del
+  Crea un nuovo file vuoto, con i permessi specificati da \var{mode}. È del
   tutto equivalente a \code{open(filedes, O\_CREAT|O\_WRONLY|O\_TRUNC, mode)}. 
 \end{prototype}
 \noindent adesso questa funzione resta solo per compatibilità con i vecchi 
   tutto equivalente a \code{open(filedes, O\_CREAT|O\_WRONLY|O\_TRUNC, mode)}. 
 \end{prototype}
 \noindent adesso questa funzione resta solo per compatibilità con i vecchi 
@@ -460,16 +460,19 @@ seguenti valori\footnote{per compatibilit
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
   \macro{L\_SET}, \macro{L\_INCR} e \macro{L\_XTND}.}:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
   \macro{L\_SET}, \macro{L\_INCR} e \macro{L\_XTND}.}:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\macro{SEEK\_SET}] si fa riferimento all'inizio del file: il valore di
-  \var{offset} è la nuova posizione.
+\item[\macro{SEEK\_SET}] si fa riferimento all'inizio del file: il valore
+  (sempre positivo) di \param{offset} indica direttamente la nuova posizione
+  corrente.
 \item[\macro{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
 \item[\macro{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
-  \var{offset} può essere negativo e positivo.
-\item[\macro{SEEK\_END}] si fa riferimento alla fine del file: il valore di
-  \var{offset} può essere negativo e positivo.
+  ad essa viene sommato \param{offset} (che può essere negativo e positivo)
+  per ottenere la nuova posizione corrente.
+\item[\macro{SEEK\_END}] si fa riferimento alla fine del file: alle dimensioni
+  del file viene sommato \param{offset} (che può essere negativo e positivo)
+  per ottenere la nuova posizione corrente.
 \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
-impostare la posizione corrente anche al di la della fine del file, e alla
+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 \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}).
@@ -479,11 +482,11 @@ Dato che la funzione ritorna la nuova posizione, usando il valore zero per
 funzione con \code{lseek(fd, 0, SEEK\_CUR)}. 
 
 Si tenga presente inoltre che usare \macro{SEEK\_END} non assicura affatto che
 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
+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ò
 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}).
+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
 
 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
@@ -491,7 +494,7 @@ i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
 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
 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
+POSIX però non specifica niente in proposito. Infine alcuni file speciali, ad
 esempio \file{/dev/null}, non causano un errore ma restituiscono un valore
 indefinito.
 
 esempio \file{/dev/null}, non causano un errore ma restituiscono un valore
 indefinito.
 
@@ -500,8 +503,9 @@ indefinito.
 \label{sec:file_read}
 
 
 \label{sec:file_read}
 
 
-Una volta che un file è stato aperto su possono leggere i dati che contiene
-utilizzando la funzione \func{read}, il cui prototipo è:
+Una volta che un file è stato aperto (con il permesso in lettura) su possono
+leggere i dati che contiene utilizzando la funzione \func{read}, il cui
+prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)}
   
   Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{buf}.
 \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)}
   
   Cerca di leggere \var{count} byte dal file \var{fd} al buffer \var{buf}.
@@ -535,7 +539,7 @@ 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,
 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
+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
 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
@@ -558,15 +562,15 @@ singolo blocco alla volta.
 In realtà anche le due condizioni segnalate dagli errori \macro{EINTR} e
 \macro{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
 In realtà anche le due condizioni segnalate dagli errori \macro{EINTR} e
 \macro{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 prendere è quella di rieseguire la funzione. Torneremo in
-dettaglio sull'argomento in \secref{sec:sig_gen_beha}.
+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
 \secref{sec:file_noblocking}) e non ci sono dati in ingresso: la funzione
 allora ritorna immediatamente con un errore \macro{EAGAIN}\footnote{sotto BSD
 
 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
 allora ritorna immediatamente con un errore \macro{EAGAIN}\footnote{sotto BSD
-  questo per questo errore viene usata la costante \macro{EWOULDBLOCK}, in
-  Linux, con le glibc, questa è sinonima di \macro{EAGAIN}.} che nel caso
-indica soltanto che occorrerà provare a ripetere la lettura.
+  per questo errore viene usata la costante \macro{EWOULDBLOCK}, in Linux, con
+  le glibc, questa è sinonima di \macro{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
@@ -593,7 +597,7 @@ Cerca di leggere \var{count} byte dal file \var{fd}, a partire dalla posizione
 \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
-modificarne la posizione corrente. È equivalente alla esecuzione di una
+modificare la posizione corrente. È equivalente all'esecuzione di una
 \func{read} seguita da una \func{lseek} che riporti al valore precedente la
 posizione corrente sul file, ma permette di eseguire l'operazione
 atomicamente. Questo può essere importante quando la posizione sul file viene
 \func{read} seguita da una \func{lseek} che riporti al valore precedente la
 posizione corrente sul file, ma permette di eseguire l'operazione
 atomicamente. Questo può essere importante quando la posizione sul file viene
@@ -604,8 +608,8 @@ condivisa da processi diversi (vedi \secref{sec:file_sharing}).  Il valore di
 \subsection{La funzione \func{write}}
 \label{sec:file_write}
 
 \subsection{La funzione \func{write}}
 \label{sec:file_write}
 
-Una volta che un file è stato aperto su può scrivere su di esso utilizzando la
-funzione \func{write}, il cui prototipo è:
+Una volta che un file è stato aperto (con il permesso in scrittura) su può
+scrivere su di esso utilizzando la funzione \func{write}, il cui prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
   
   Scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
 \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
   
   Scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
@@ -676,7 +680,7 @@ dell'argomento sar
 \label{sec:file_sharing}
 
 In \secref{sec:file_fd} abbiamo descritto brevemente l'architettura
 \label{sec:file_sharing}
 
 In \secref{sec:file_fd} abbiamo descritto brevemente l'architettura
-dell'interfaccia coi file da parte di un processo, mostrando in
+dell'interfaccia coi file da parte di un processo, mostrando in
 \figref{fig:file_proc_file} le principali strutture usate dal kernel;
 esamineremo ora in dettaglio le conseguenze che questa architettura ha nei
 confronti dell'accesso allo stesso file da parte di processi diversi.
 \figref{fig:file_proc_file} le principali strutture usate dal kernel;
 esamineremo ora in dettaglio le conseguenze che questa architettura ha nei
 confronti dell'accesso allo stesso file da parte di processi diversi.
@@ -736,7 +740,7 @@ riferimento alla stessa voce nella \textit{file table}, condividendo cos
 posizione corrente sul file. Questo ha le conseguenze descritte a suo tempo in
 \secref{sec:proc_fork}: in caso di scrittura contemporanea la posizione
 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
 posizione corrente sul file. Questo ha le conseguenze descritte a suo tempo in
 \secref{sec:proc_fork}: in caso di scrittura contemporanea la posizione
 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
-\var{f\_pos} che è la stesso per entrambi).
+\var{f\_pos} che è lo stesso per entrambi).
 
 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
 
 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
@@ -750,10 +754,10 @@ voce della \textit{file table}.
 
 
 
 
 
 
-\subsection{Operazioni atomiche coi file}
+\subsection{Operazioni atomiche coi file}
 \label{sec:file_atomic}
 
 \label{sec:file_atomic}
 
-Come si è visto in un sistema Unix è sempre possibile per più processi
+Come si è visto in un sistema unix-like è sempre possibile per più processi
 accedere in contemporanea allo stesso file, e che le operazioni di lettura e
 scrittura possono essere fatte da ogni processo in maniera autonoma in base
 ad una posizione corrente nel file che è locale a ciascuno di essi.
 accedere in contemporanea allo stesso file, e che le operazioni di lettura e
 scrittura possono essere fatte da ogni processo in maniera autonoma in base
 ad una posizione corrente nel file che è locale a ciascuno di essi.
@@ -767,15 +771,14 @@ 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} 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.
+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à
@@ -792,7 +795,7 @@ sequenza logica porterebbe a verificare prima l'esistenza del file con una
 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.
 
 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
+Per questo motivo sono stati introdotti per \func{open} i due flag
 \macro{O\_CREAT} e \macro{O\_EXCL}. In questo modo l'operazione di controllo
 dell'esistenza del file (con relativa uscita dalla funzione con un errore) e
 creazione in caso di assenza, diventa atomica essendo svolta tutta all'interno
 \macro{O\_CREAT} e \macro{O\_EXCL}. In questo modo l'operazione di controllo
 dell'esistenza del file (con relativa uscita dalla funzione con un errore) e
 creazione in caso di assenza, diventa atomica essendo svolta tutta all'interno
@@ -810,10 +813,11 @@ secondo tempo rispetto al momento della esecuzione della \func{write}.
 Per questo motivo, quando è necessaria una sincronizzazione dei dati, il
 sistema mette a disposizione delle funzioni che provvedono a forzare lo
 scarico dei dati dai buffer del kernel.\footnote{come già accennato neanche
 Per questo motivo, quando è necessaria una sincronizzazione dei dati, il
 sistema mette a disposizione delle funzioni che provvedono a forzare lo
 scarico dei dati dai buffer del kernel.\footnote{come già accennato neanche
-  questo da la garanzia assoluta che i dati siano integri dopo la chiamata,
-  l'hardware dei dischi è in genere dotato di un suo meccanismo interno che
-  può ritardare ulteriormente la scrittura effettiva.} La prima di queste
-funzioni è \func{sync} il cui prototipo è:
+  questo dà la garanzia assoluta che i dati siano integri dopo la chiamata,
+  l'hardware dei dischi è in genere dotato di un suo meccanismo interno di
+  ottimizzazione per l'accesso al disco che può ritardare ulteriormente la
+  scrittura effettiva.} La prima di queste funzioni è \func{sync} il cui
+prototipo è:
 \begin{prototype}{unistd.h}{int sync(void)}
   
   Sincronizza il buffer della cache dei file col disco.
 \begin{prototype}{unistd.h}{int sync(void)}
   
   Sincronizza il buffer della cache dei file col disco.
@@ -843,7 +847,7 @@ usare le due funzioni \func{fsync} e \func{fdatasync}, i cui prototipi sono:
   Sincronizza i dati del file \param{fd}.
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
   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 i codici restituiti in \var{errno} sono:
+    nel qual caso \var{errno} assume i valori:
   \begin{errlist}
   \item[\macro{EINVAL}] \param{fd} è un file speciale che non supporta la
     sincronizzazione.
   \begin{errlist}
   \item[\macro{EINVAL}] \param{fd} è un file speciale che non supporta la
     sincronizzazione.