From: Simone Piccardi Date: Mon, 14 Oct 2002 22:32:20 +0000 (+0000) Subject: Un po' di roba sul locking X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=4693c008411fc78ee1df605820a151d0adfa5c18 Un po' di roba sul locking --- diff --git a/README b/README index 11dd99d..cdfa3ea 100644 --- 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. + diff --git a/fileadv.tex b/fileadv.tex index ea80eb7..2a2d916 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -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,