\func{flock}, la seconda è quella recepita dallo standard POSIX.1 (che è
derivata dall'interfaccia usata in System V), che è basata sulla funzione
\func{fcntl}. I \textit{file lock} sono implementati in maniera completamente
-indipendente nelle due interfacce,\footnote{in realtà con Linux questo avviene
- solo dalla serie 2.0 dei kernel.} che pertanto possono coesistere senza
+indipendente nelle due interfacce (in realtà con Linux questo avviene solo
+dalla serie 2.0 dei kernel) che pertanto possono coesistere senza
interferenze.
Entrambe le interfacce prevedono la stessa procedura di funzionamento: si
permette di eseguire un blocco solo su un intero file; la funzione usata per
richiedere e rimuovere un \textit{file lock} è \funcd{flock}, ed il suo
prototipo è:
-\begin{prototype}{sys/file.h}{int flock(int fd, int operation)}
-
- Applica o rimuove un \textit{file lock} 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}
+
+\begin{funcproto}{
+\fhead{sys/file.h}
+\fdecl{int flock(int fd, int operation)}
+\fdesc{Applica o rimuove un \textit{file lock}.}
+}
+
+{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+ caso \var{errno} assumerà uno dei valori:
+ \begin{errlist}
\item[\errcode{EWOULDBLOCK}] il file ha già un blocco attivo, e si è
specificato \const{LOCK\_NB}.
- \end{errlist}
- }
-\end{prototype}
+ \end{errlist}
+}
+\end{funcproto}
La funzione può essere usata per acquisire o rilasciare un \textit{file lock}
a seconda di quanto specificato tramite il valore dell'argomento
\const{LOCK\_NB} la funzione non si bloccherà qualora il \textit{file lock}
non possa essere acquisito, ma ritornerà subito con un errore di
\errcode{EWOULDBLOCK}. Per rilasciare un \textit{file lock} si dovrà invece
-usare direttamente const{LOCK\_UN}.
+usare direttamente \const{LOCK\_UN}.
Si tenga presente che non esiste una modalità per eseguire atomicamente un
cambiamento del tipo di blocco (da \textit{shared lock} a \textit{esclusive
\begin{figure}[!htb]
\centering
- \includegraphics[width=15.5cm]{img/file_flock}
+ \includegraphics[width=14cm]{img/file_flock}
\caption{Schema dell'architettura del \textit{file locking}, nel caso
particolare del suo utilizzo da parte dalla funzione \func{flock}.}
\label{fig:file_flock_struct}