Un po' di roba sul locking
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 14 Oct 2002 22:32:20 +0000 (22:32 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 14 Oct 2002 22:32:20 +0000 (22:32 +0000)
README
fileadv.tex

diff --git a/README b/README
index 11dd99d..cdfa3ea 100644 (file)
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
 GaPiL - Istruzioni per la "compilazione"
--------
+-----
 
 Dato che il testo e` scritto in LaTeX e` necessario "compilarlo" per
-poter ottenre un formato stampabile.
+poter ottenere un formato stampabile.
 
 Dato l'uso intensivo di vari pacchetti e le dimensioni del tutto, per
 poter compilare il testo completo di GaPiL occorre aumentare le
@@ -46,3 +46,8 @@ e pigiare invio agli avvertimenti sui colori.
 
 (prima si devono aver generato le figure con make)
 
+Attenzione: a partire da fine Ottobre 2002, per un motivo che non sono
+ancora riuscito a capire, viene generato un errore alla fine del file
+session.tex. Il codice e` corretto, cio` non ostante latex si ferma ed
+occorre farlo proseguire premendo invio.
+
index ea80eb7..2a2d916 100644 (file)
@@ -1233,9 +1233,38 @@ sovrapposizioni, e garantire la atomicit
 
 La prima modalità di file locking che è stata implementata nei sistemi
 unix-like è quella che viene usualmente chiamata \textit{advisory locking}, in
-quanto è il processo, e non il sistema, che si incarica di verificare se
-esiste una condizione di blocco per l'accesso ai file.
+quanto sono i singoli processi, e non il sistema, che si incaricano di
+asserire e verificare se esistono delle condizioni di blocco per l'accesso ai
+file. Questo significa che le funzioni \func{read} o \func{write} non
+risentono affatto della presenza di un eventuale blocco, e che sta ai vari
+processi controllare esplicitamente lo stato dei file condivisi prima di
+accedervi ed implementare opportunamente un protocollo di accesso.
+
+In Linux sono disponibili due interfacce per utilizzare l'\textit{advisory
+  locking}, la prima è quella derivata da BSD, che è basata sulla funzione
+\func{flock}, la seconda è quella standardizzata da POSIX.1 (originaria di
+System V), che è basata sulla funzione \func{fcntl}.  I \textit{file lock}
+sono implementati in maniera completamente indipendente nelle due interfacce,
+che pertanto possono coesistere senza interferenze.
+
+L'interfaccia classica usata da BSD permette di eseguire il blocco solo su un
+intero file, come accennato essa è basata sulla funzione \func{flock}, il cui
+prototipo è:
+\begin{prototype}{sys/file.h}{int flock(int fd, int operation)}
+  
+  Applica o rimuove un blocco sul file \param{fd}.
+  
+  \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
+    errore, nel qual caso \var{errno} assumerà uno dei valori:
+    \begin{errlist}
+    \item[\macro{EWOULDBLOCK}] Il file ha già un blocco attivo, e si è
+      specificato \macro{LOCK\_NB}.
+    \end{errlist}
+  }
+\end{prototype}
 
+Il comportamento della funzione è specificato dal valore di \param{operation},
+che è espresso come maschera binaria,