\textit{file locking} (vedi sez.~\ref{sec:file_locking}).}
Per queste operazioni di manipolazione e di controllo delle varie proprietà e
-caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl},
-il cui prototipo è:
+caratteristiche di un file descriptor, viene usata la funzione di sistema
+\funcd{fcntl}, il cui prototipo è:
\begin{funcproto}{
\fhead{unistd.h}
errori possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore
del massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il
massimo numero di descrittori consentito.
-\item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
+\item[\const{F\_DUPFD\_CLOEXEC}] ha lo stesso effetto di \const{F\_DUPFD}, ma
+ in più attiva il flag di \itindex{close-on-exec} \textit{close-on-exec} sul
+ nuovo file descriptor duplicato, in modo da evitare una successiva chiamata
+ con \const{F\_SETFD}. Introdotta con il kernel 2.6.24.
+\item[\const{F\_GETFD}] ritorna il valore dei \textit{file descriptor flags} di
+ \param{fd} o $-1$ in caso di errore, \param{arg} viene ignorato. Se
+ \const{FD\_CLOEXEC} è impostato i file descriptor aperti vengono chiusi
+ attraverso una \func{exec} altrimenti (il comportamento predefinito) restano
+ aperti.
+\item[\const{F\_SETFD}] imposta il valore dei \textit{file descriptor flags} al
valore specificato con \param{arg}. Al momento l'unico bit usato è quello di
\itindex{close-on-exec} \textit{close-on-exec}, identificato dalla costante
\const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}). Ritorna un
valore nullo in caso di successo e $-1$ in caso di errore.
-\item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
- \param{fd} o $-1$ in caso di errore; se \const{FD\_CLOEXEC} è impostato i
- file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti
- (il comportamento predefinito) restano aperti.
-\item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag} in
+\item[\const{F\_GETFL}] ritorna il valore dei \textit{file status flags} in
caso di successo o $-1$ in caso di errore; permette cioè di rileggere quei
- bit impostati da \func{open} all'apertura del file che vengono memorizzati,
- quelli riportati in tab.~\ref{tab:open_access_mode_flag} e
+ valori dell'argomento \param{flags} di \func{open} che vengono memorizzati,
+ più precisamente quelli riportati in tab.~\ref{tab:open_access_mode_flag} e
tab.~\ref{tab:open_operation_flag}).
\item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore
specificato da \param{arg}, ritorna un valore nullo in caso di successo o
- $-1$ in caso di errore. Possono essere impostati solo i bit riportati in
- tab.~\ref{tab:open_operation_flag}.\footnote{la pagina di manuale riporta
- come impostabili solo \const{O\_APPEND}, \const{O\_NONBLOCK} e
- \const{O\_ASYNC}.}
+ $-1$ in caso di errore. Possono essere impostati solo flag fra quelli
+ riportati in tab.~\ref{tab:open_operation_flag}. su Linux si possono
+ modificare soltanto \const{O\_APPEND}, \const{O\_ASYNC}, \const{O\_DIRECT},
+ \const{O\_NOATIME} e \const{O\_NONBLOCK}.
\item[\const{F\_GETLK}] richiede un controllo sul file lock specificato da
\param{lock}, sovrascrivendo la struttura da esso puntata con il risultato;
ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Questa
(vedi sez.~\ref{sec:sess_proc_group}) raggruppamenti di processi usati nel
controllo di sessione; a ciascuno di essi è associato un identificatore
(un numero positivo analogo al \ids{PID}).} che è preposto alla ricezione
- dei segnali \signal{SIGIO}\footnote{o qualunque altro segnale alternativo
- impostato con \const{F\_FSETSIG}.} per gli eventi associati al file
+ dei segnali \signal{SIGIO} (o qualunque altro segnale alternativo impostato
+ con \const{F\_FSETSIG}) per gli eventi associati al file
descriptor \param{fd}\footnote{il segnale viene usato sia per il
\textit{Signal Drive I/O}, che tratteremo in
- sez.~\ref{sec:file_asyncronous_operation}, e dai vari meccanismi di
+ sez.~\ref{sec:file_asyncronous_operation}, che dai vari meccanismi di
notifica asincrona, che tratteremo in
sez.~\ref{sec:file_asyncronous_lease}.} e \signal{SIGURG} per la notifica
- dei dati urgenti di un socket.\footnote{vedi
- sez.~\ref{sec:TCP_urgent_data}.} Nel caso di un \textit{process group}
- viene restituito un valore negativo il cui valore assoluto corrisponde
- all'identificatore del \itindex{process~group} \textit{process group}. In
- caso di errore viene restituito $-1$.
+ dei dati urgenti di un socket (vedi sez.~\ref{sec:TCP_urgent_data}). Nel
+ caso di un \textit{process group} viene restituito un valore negativo il cui
+ valore assoluto corrisponde all'identificatore del \itindex{process~group}
+ \textit{process group}.\footnote{si tenga presente però che se questo valore
+ è compreso nell'intervallo fra $-1$ e $-4095$ questo viene interpretato
+ dalla \acr{glibc} come un errore per cui in tal caso \func{fcntl}
+ ritornerà comunque $-1$ mentre il valore restituito dalla \textit{system
+ call} verrà assegnato ad \var{errno}, cambiato di segno.} In caso di
+ errore viene restituito $-1$.
\item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg},
l'identificatore del processo o del \itindex{process~group} \textit{process
- group} che riceverà i segnali \signal{SIGIO} e \signal{SIGURG} per gli
+ group} che riceverà i segnali \signal{SIGIO} e \signal{SIGURG} per gli
eventi associati al file descriptor \param{fd}, ritorna un valore nullo in
caso di successo o $-1$ in caso di errore. Come per \const{F\_GETOWN}, per
impostare un \itindex{process~group} \textit{process group} si deve usare