+L'operazione effettivamente svolta dalla funzione è stabilita dal valore
+dall'argomento \param{cmd} che, come già riportato in \secref{sec:file_fcntl},
+specifica l'azione da compiere; i valori relativi al file locking sono tre:
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{F\_GETLK}] verifica se il file lock specificato dalla struttura
+ puntata da \param{lock} può essere acquisito: in caso negativo sovrascrive
+ la struttura \param{flock} con i valori relativi al lock già esistente che
+ ne blocca l'acquisizione, altrimenti si limita a impostarne il campo
+ \var{l\_type} con il valore \macro{F\_UNLCK}.
+\item[\macro{F\_SETLK}] se il campo \var{l\_type} della struttura puntata da
+ \param{lock} è \macro{F\_RDLCK} o \macro{F\_WRLCK} richiede il
+ corrispondente file lock, se è \macro{F\_UNLCK} lo rilascia. Nel caso la
+ richiesta non possa essere soddisfatta a causa di un lock preesistente la
+ funzione ritorna immediatamente con un errore di \macro{EACCES} o di
+ \macro{EAGAIN}.
+\item[\macro{F\_SETLKW}] è identica a \macro{F\_SETLK}, ma se la richiesta di
+ un lock non può essere soddisfatta per la presenza di un altro blocco, mette
+ il processo in stato di attesa fintanto che il lock precedente non viene
+ rilasciato. Se l'attesa viene interrotta da un segnale la funzione ritorna
+ con un errore di \macro{EINTR}.
+\end{basedescript}
+
+Si noti che il comando \macro{F\_GETLK} non serve a rilevare una presenza
+generica di lock su un file, perché se ne esistono di compatibili con quello
+richiesto, la funzione ritorna comunque impostando \var{l\_type} a
+\macro{F\_UNLCK}. Inoltre a seconda del valore di \var{l\_type} si potrà
+controllare l'esistenza di un qualunque tipo di lock (con \macro{F\_WRLCK}) o
+dei soli lock esclusivi (con \macro{F\_RDLCK}). Si consideri poi che può
+esserci più di un lock che impedisce l'acquisizione di quello richiesto, ma la
+funzione ne riporterà sempre soltanto uno, impostando opportunamente
+\var{l\_whence} a \macro{SEEK\_SET} ed i valori \var{l\_start} e \var{l\_len}
+per indicare quale è la regione effettivamente bloccata.
+
+Infine si tenga presente che effettuare un controllo con il comando
+\macro{F\_GETLK} e poi tentare l'acquisizione con \macro{F\_SETLK} non è una
+operazione atomica (un altro processo potrebbe acquisire un lock fra le due
+chiamate) per cui si deve sempre verificare il codice di ritorno di
+\func{fcntl}\footnote{controllare il codice di ritorno delle funzioni invocate
+ è comunque una buona norma di programmazione, che permette di evitare un
+ sacco di errori difficili da tracciare proprio perché non vengono rilevati.}
+quando la si invoca con \macro{F\_SETLK} per controllare che il lock sia stato
+effettivamente acquisito.
+
+Un'ultima considerazione riguardo il funzionamento del file locking POSIX
+riguarda la loro caratteristica di operare su delle sezioni di file: è
+possibile con una sola chiamata rimuovere più lock separati (indicando in
+\var{flock} una regione che li copra tutti), o rimuovere solo una parte di un
+lock preesistente (indicando una sezione contenuta in un altro lock), o di
+coprire con un nuovo lock altri lock già ottenuti. In tutti questi casi il
+kernel si preoccupa di accorpare o suddividere le regioni bloccate,
+aggiornando opportunamente le strutture interne usate per il file locking.