Chiarimenti sui permessi di accesso.
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 18 Nov 2002 23:54:01 +0000 (23:54 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 18 Nov 2002 23:54:01 +0000 (23:54 +0000)
fileadv.tex
sources/Flock.c

index 5ef95b01caa30217522f1f8bda0ada27457d1374..811d9b196310f3c67f9056baed227efed9489e3d 100644 (file)
@@ -1307,6 +1307,11 @@ comportamento non bloccante) viene posto in stato di sleep. Una volta finite
 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
@@ -1388,7 +1393,7 @@ stesso file.
 
 \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}
@@ -1612,7 +1617,7 @@ questo motivo il kernel si incarica di rilevare situazioni di questo tipo, ed
 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.}
@@ -1781,7 +1786,7 @@ comportamento dipende dalla semantica scelta; nel caso sia BSD occorre
 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
@@ -2080,13 +2085,15 @@ quando si esegue la mappatura con l'opzione \macro{MAP\_SHARED}, si ha un
 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.
 
 
 
index 8ea0ed5f3d320ff112336724b1549a0cb04a6a6c..55d84fefd3396aa545a13665daae3facc07b654a 100644 (file)
@@ -26,7 +26,7 @@
  *
  * 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 $
  *
  *****************************************************************************/
 /*
@@ -111,7 +111,7 @@ int main(int argc, char *argv[])
        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);