Aggiunte e correzioni alle funzioni per i file di lock
[gapil.git] / fileunix.tex
index 056e3b42b4a5e669c3d00de7d9f80969c1383ba7..8a39680d6b15b37490483be0781370264c3ba0e3 100644 (file)
@@ -295,10 +295,10 @@ sempre il file descriptor con il valore pi
 
 \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 (vedi \secref{sec:ipc_file_lock}) possono incorrere in una race
+  \textsl{file di lock}\index{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.}
+  l'esistenza (vedi \secref{sec:ipc_file_lock}).}
 
 \footnotetext[3]{\textit{Denial of Service}, si chiamano così attacchi miranti
   ad impedire un servizio causando una qualche forma di carico eccessivo per
@@ -767,7 +767,7 @@ problema, quando si andr
 maniera imprevedibile.  Il sistema però fornisce in alcuni casi la possibilità
 di eseguire alcune operazioni di scrittura in maniera coordinata anche senza
 utilizzare meccanismi di sincronizzazione più complessi (come il \textit{file
-  locking}, che esamineremo in \secref{cha:file_advanced}).
+  locking}, che esamineremo in \secref{sec:file_locking}).
 
 Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui
 vari processi devono scrivere alla fine di un file (ad esempio un file di
@@ -789,17 +789,19 @@ avviene all'interno di una singola system call (la \func{write}) che non
 essendo interrompibile da un altro processo costituisce un'operazione atomica.
 
 Un altro caso tipico in cui è necessaria l'atomicità è quello in cui si vuole
-creare un file di lock, bloccandosi se il file esiste. In questo caso la
-sequenza logica porterebbe a verificare prima l'esistenza del file con una
-\func{stat} per poi crearlo con una \func{creat}; di nuovo avremmo la
-possibilità di una race condition\index{race condition} da parte di un altro
-processo che crea lo stesso file fra il controllo e la creazione.
+creare un \textsl{file di lock}\index{file di lock}, bloccandosi se il file
+esiste. In questo caso la sequenza logica porterebbe a verificare prima
+l'esistenza del file con una \func{stat} per poi crearlo con una \func{creat};
+di nuovo avremmo la possibilità di una race condition\index{race condition} da
+parte di un altro processo che crea lo stesso file fra il controllo e la
+creazione.
 
 Per questo motivo sono stati introdotti per \func{open} i due flag
 \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
-di una singola system call.
+di una singola system call (per i dettagli sull'uso di questa caratteristica
+si veda \secref{sec:ipc_file_lock}).
 
 
 \subsection{La funzioni \func{sync} e \func{fsync}}
@@ -833,8 +835,12 @@ La funzione viene usata dal comando \cmd{sync} quando si vuole forzare
 esplicitamente lo scarico dei dati su disco, o dal demone di sistema
 \cmd{update} che esegue lo scarico dei dati ad intervalli di tempo fissi: il
 valore tradizionale, usato da BSD, per l'update dei dati è ogni 30 secondi, ma
-in Linux ilvalore utilizzato è di 5 secondi; con le nuove versioni poi, è il
-kernel che si occupa direttamente di tutto quanto.
+in Linux il valore utilizzato è di 5 secondi; con le nuove versioni\footnote{a
+  partire dal kernel 2.2.8} poi, è il kernel che si occupa direttamente di
+tutto quanto attraverso il demone interno \cmd{bdflush}, il cui comportamento
+può essere controllato attraverso il file \file{/proc/sys/vm/bdflush} (per il
+significato dei valori si può leggere la documentazione allegata al kernel in
+\file{Documentation/sysctl/vm.txt}).
 
 Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere
 sicuri che i dati di un database sono stati registrati su disco) si possono
@@ -914,8 +920,9 @@ sull'altro (dato che quello che viene modificato 
 della \textit{file table} a cui entrambi fanno riferimento). L'unica
 differenza fra due file descriptor duplicati è che ciascuno avrà il suo
 \textit{file descriptor flag}; a questo proposito va specificato che nel caso
-di \func{dup} il flag di \textit{close on exec} viene sempre cancellato nella
-copia.
+di \func{dup} il flag di \textit{close-on-exec}\index{close-on-exec} (vedi
+\secref{sec:proc_exec} e \secref{sec:file_fcntl}) viene sempre cancellato
+nella copia.
 
 L'uso principale di questa funzione è per la redirezione dell'input e
 dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec};
@@ -995,10 +1002,11 @@ 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.
-\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\_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
+  \macro{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
+  esecuzione di una \func{exec} (vedi \secref{sec:proc_exec}).
 \item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
   \var{fd}, se \macro{FD\_CLOEXEC} è impostato i file descriptor aperti
   vengono chiusi attraverso una \func{exec} altrimenti (il comportamento