+Oltre alle operazioni base esaminate in \secref{sec:file_base_func} esistono
+tutta una serie di operazioni ausiliarie che è possibile eseguire su un file
+descriptor. Per queste operazioni di manipolazione delle varie proprietà di un
+file descriptor viene usata la funzione \func{fcntl} il cui prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{fcntl.h}
+ \funcdecl{int fcntl(int fd, int cmd)}
+ \funcdecl{int fcntl(int fd, int cmd, long arg)}
+ \funcdecl{int fcntl(int fd, int cmd, struct flock * lock)}
+ La funzione esegue una delle possibili operazioni specificate da \param{cmd}
+ sul file \param{fd}.
+
+ La funzione ha valori di ritorno diversi a seconda dell'operazione. In caso
+ di errore il valore di ritorno è -1 e la variabile \var{errno} viene settata
+ ad un opportuno codice, quelli validi in generale sono:
+ \begin{errlist}
+ \item \macro{EBADF} \param{oldfd} non è un file aperto.
+ \end{errlist}
+\end{functions}
+
+Il comportamento di questa funzione è determinato dal valore del comando
+\param{cmd} che le viene fornito; in \secref{sec:file_dup} abbiamo incontrato
+un esempio per la duplicazione dei file descriptor, una lista dei possibili
+valori è riportata di seguito:
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{F\_DUPFD}] trova il primo file descriptor disponibile di valore
+ maggiore o uguale ad \param{arg} e ne fa una copia di \var{fd}. In caso di
+ successo ritorna il nuovo file descriptor. Gli errori possibili sono
+ \macro{EINVAL} se \param{arg} è negativo o maggiore del massimo consentito o
+ \macro{EMFILE} se il processo ha già raggiunto il massimo numero di
+ descrittori consentito.
+\item[\macro{F\_SETFD}] setta il valore del \textit{file descriptor flag}
+ al valore specificato con \param{arg}. Al momento l'unico bit usato è
+ quello di \textit{close on exec}, identificato dalla costante
+ \macro{FD\_CLOEXEC}.
+\item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
+ \var{fd}, se \macro{FD\_CLOEXEC} è settato i file descriptor aperti vengono
+ chiusi attraverso una \func{exec} altrimenti (il default) restano aperti.
+\item[\macro{F\_GETFL}] ritorna il valore del \textit{file status flag},
+ permette cioè di rileggere quei bit settati da \func{open} all'apertura del
+ file che vengono memorizzati (quelli riportati nella prima e terza sezione
+ di \tabref{tab:file_open_flags}).
+\item[\macro{F\_SETFL}] setta il \textit{file status flag} al valore
+ specificato da \param{arg}, possono essere settati solo i bit riportati
+ nella terza sezione di \tabref{tab:file_open_flags} (da verificare).
+\item[\macro{F\_GETLK}] se un file lock è attivo restituisce nella struttura
+ \param{lock} la struttura \type{flock} che impedisce l'acquisizione del
+ blocco, altrimenti setta il campo \var{l\_type} a \macro{F\_UNLCK} (per i
+ dettagli sul \textit{file locking} vedi \secref{sec:file_locking}).
+\item[\macro{F\_SETLK}] richiede il file lock specificato da \param{lock} se
+ \var{l\_type} è \macro{F\_RDLCK} o \macro{F\_WRLLCK} o lo rilascia se
+ \var{l\_type} è \macro{F\_UNLCK}. Se il lock è tenuto da qualcun'altro
+ ritorna immediatamente restituendo -1 e setta \var{errno} a \macro{EACCES} o
+ \macro{EAGAIN} (per i dettagli sul \textit{file locking} vedi
+ \secref{sec:file_locking}).
+\item[\macro{F\_SETLKW}] identica a \macro{F\_SETLK} eccetto per il fatto che
+ la funzione non ritorna subito ma attende che il blocco sia rilasciato. Se
+ l'attesa viene interrotta da un segnale la funzione restituisce -1 e setta
+ \var{errno} a \macro{EINTR} (per i dettagli sul \textit{file locking} vedi
+ \secref{sec:file_locking}).
+\item[\macro{F\_GETOWN}] restituisce il \acr{pid} del processo o il process
+ group che è preposto alla ricezione dei segnali \macro{SIGIO} e
+ \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
+ process group è restituito come valore negativo.
+\item[\macro{F\_SETOWN}] setta il processo o process group che riceverà i
+ segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
+ descriptor \var{fd}. I process group sono settati usando valori negativi.
+\item[\macro{F\_GETSIG}] restituisce il segnale mandato quando ci sono dati
+ disponibili in input sul file descriptor. Il valore 0 indica il default (che
+ è \macro{SIGIO}), un valore diverso da zero indica il segnale richiesto,
+ (che può essere lo stesso \macro{SIGIO}), nel qual caso al manipolatore del
+ segnale, se installato con \macro{SA\_SIGINFO}, vengono rese disponibili
+ informazioni ulteriori informazioni.
+\item[\macro{F\_SETSIG}] setta il segnale da inviare quando diventa possibile
+ effettuare I/O sul file descriptor. Il valore zero indica il default
+ (\macro{SIGIO}), ogni altro valore permette di rendere disponibile al
+ manipolatore del segnale ulteriori informazioni se si è usata
+ \macro{SA\_SIGINFO}.
+\end{basedescript}
+
+La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
+poter essere affrontate in dettaglio a questo punto; saranno riprese più
+avanti quando affronteremo le problematiche ad esse relative.
+
+Per determinare le modalità di accesso inoltre può essere necessario usare la
+