le operazioni sul file si deve provvedere a rimuovere il lock. La situazione
delle varie possibilità è riassunta in \tabref{tab:file_file_lock}.
+Si tenga presente infine che il controllo di accesso è effettuato quando si
+apre un file, l'unico controllo residuo è che il tipo di lock che si vuole
+otternere deve essere compatibile con le modalità di apertura dello stesso (di
+lettura per un read lock e di scrittura per un write lock).
+
%% Si ricordi che
%% la condizione per acquisire uno \textit{shared lock} è che il file non abbia
%% già un \textit{exclusive lock} attivo, mentre per acquisire un
\begin{figure}[htb]
\centering
- \includegraphics[width=13cm]{img/file_flock}
+ \includegraphics[width=12.5cm]{img/file_flock}
\caption{Schema dell'architettura del file locking, nel caso particolare
del suo utilizzo da parte dalla funzione \func{flock}.}
\label{fig:file_flock_struct}
impedirle restituendo un errore di \macro{EDEADLK} alla funzione che cerca di
acquisire un lock che porterebbe ad un \textit{deadlock}.
-\begin{figure}[htb]
+\begin{figure}[!bht]
\centering \includegraphics[width=13cm]{img/file_posix_lock}
\caption{Schema dell'architettura del file locking, nel caso particolare
del suo utilizzo secondo l'interfaccia standard POSIX.}
reimpostare il valore di \var{cmd} per l'uso con \func{flock}; infatti il
valore preimpostato fa riferimento alla semantica POSIX e vale rispettivamente
\macro{F\_SETLKW} o \macro{F\_SETLK} a seconda che si sia impostato o meno la
-modalità bloccante.
+modalità bloccante.
Nel caso si sia scelta la semantica BSD (\texttt{\small 25--34}) prima si
controlla (\texttt{\small 27--31}) il valore di \var{cmd} per determinare se
accesso al contenuto del file. Lo standard SVID prevede che sia impossibile
eseguire il memory mapping di un file su cui sono presenti dei
lock\footnote{alcuni sistemi, come HP-UX, sono ancora più restrittivi e lo
- impediscono anche in caso di \textit{advisory locking}, anche se questo non
- ha molto senso.} in Linux è stata però fatta la scelta
-implementativa\footnote{per i dettagli si possono leggere le note nel kernel,
- mantenute nel file \file{Documentation/mandatory.txt}.} di seguire questo
-comportamento soltanto quando si chiama \func{mmap} con l'opzione
-\macro{MAP\_SHARED} (nel qual caso la funzione fallisce con il solito
-\macro{EAGAIN}).
+ impediscono anche in caso di \textit{advisory locking}, anche se questo
+ comportamento non ha molto senso, dato che comunque qualunque accesso
+ diretto al file è consentito.} in Linux è stata però fatta la scelta
+implementativa\footnote{per i dettagli si possono leggere le note relative
+ all'implementazione, mantenute insime ai sorgenti del kernel nel file
+ \file{Documentation/mandatory.txt}.} di seguire questo comportamento
+soltanto quando si chiama \func{mmap} con l'opzione \macro{MAP\_SHARED} (nel
+qual caso la funzione fallisce con il solito \macro{EAGAIN}) che comporta la
+possibilità di modificare il file.
*
* Usage: flock -h give all info's
*
- * $Id: Flock.c,v 1.2 2002/11/17 17:30:51 piccardi Exp $
+ * $Id: Flock.c,v 1.3 2002/11/18 23:54:01 piccardi Exp $
*
*****************************************************************************/
/*
printf("You should set a read or a write lock\n");
usage();
}
- fd = open(argv[optind], O_RDWR); /* open the file to be locked */
+ fd = open(argv[optind], O_RDONLY); /* open the file to be locked */
if (fd < 0) { /* on error exit */
perror("Wrong filename");
exit(1);