sovrapposizioni, e garantire la atomicità delle operazioni di scrittura.
+
+\subsection{Il file locking in Linux}
+\label{sec:file_linux_file_lock}
+
+L'implementazione del \textit{file locking} in Linux, benché perfettamente
+funzionante, resta una sovrapposizione di diverse interfacce, risultante in
+una complessità
+
+
+
\subsection{L'\textit{advisory locking}}
\label{sec:file_record_locking}
\end{prototype}
Il comportamento della funzione è specificato dal valore dell'argomento
-\param{operation}, da passare come maschera binaria dei valori riportati in
-\tabref{tab:file_flock_operation}.
+\param{operation}, da passare come maschera binaria dei valori riportati in
+\tabref{tab:file_flock_operation}. Quando si chiude un file i lock esistenti
+su di esso vengono sempre cancellati.
+
\begin{table}[htb]
\centering
\label{tab:file_flock_operation}
\end{table}
-
-Con \func{flock} il blocco è associato direttamente al file (cioè rispetto
-allo schema di \secref{sec:file_fd} fa riferimento all'inode e non al file
-descriptor); pertanto sia \func{dup} che \func{fork} non creano altre istanze
-del blocco ma piuttosto degli ulteriori riferimenti allo stesso \textit{file
- lock}.
-
-La funzione blocca direttamente il file (cioè rispetto allo schema di
-\secref{fig:file_stat_struct} fa riferimento alla struttura \var{file}, non al
-file descriptor). Pertanto sia \func{dup} che \func{fork} non creano ulteriori
-istanze di un \textit{file lock} quanto piuttosto degli ulteriori riferimenti
-allo stesso \textit{file lock}. Questo comporta che un lock può essere rimosso
-su uno qualunque dei file descriptor che fanno riferimento allo stesso file,
-ed esso .
+La funzione esegue il blocco direttamente il file (cioè rispetto allo schema
+di \secref{fig:file_stat_struct} il blocco è mantenuto in riferimento alla
+struttura \var{file}, non al file descriptor). Pertanto sia \func{dup} che
+\func{fork} non creano ulteriori istanze di un \textit{file lock} quanto
+piuttosto degli ulteriori riferimenti allo stesso. Questo comporta che un
+\textit{file lock} può essere rimosso su uno qualunque dei file descriptor che
+fanno riferimento allo stesso file: quindi se si toglie il blocco in un
+processo figlio o su un file descriptor duplicato, questo sarà cancellato
+rispettivamente anche nel processo padre e sul file descriptor originario.
La seconda interfaccia per l'\textit{advisory locking} disponibile in Linux è
}
\end{prototype}
+Si tenga presente che \func{flock} non è in grado di funzionare per i file
+manetenuti su NFS, in questo caso, se si ha la necessità di eseguire il
+\textit{file locking}, occorre usare l'interfaccia basata su \func{fcntl} che
+può funzionare anche attraverso NFS, a condizione che sia il client che il
+server supportino questa funzionalità.
+
+
+La standardizzatione operata con POSIX.1 ha adottato le API per il
+\textit{file locking} originarie di System V, basate sulla funzione
+
Al contrario di \func{flock} con \func{fcntl} è possibile bloccare anche solo
-delle sezioni di un file. La funzione prende come argomento
+delle sezioni di un file. La funzione prende come argomento una struttura
+\var{flock} la cui definizione è riportata in \figref{fig:struct_flock}.
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
\begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
-struct struct {
+struct flock {
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
off_t l_start; /* Offset where the lock begins. */
-
-Si tenga conto che \func{flock} non è in grado di eseguire il \textit{file
- locking} su NFS, se si ha questa necessità occorre usare \func{fcntl} che
-funziona anche attraverso NFS, posto che il server supporti il \textit{file
- locking}.
-
\subsection{Il \textit{mandatory locking}}
\label{sec:file_mand_locking}