in fase di apertura del file, deve
invece essere attivato successivamente con
\func{fcntl}.\\
- \const{O\_CLOEXEC}& Attiva la modalità di \itindex{close-on-exec}
- \textit{close-on-exec} (vedi
+ \const{O\_CLOEXEC}& Attiva la modalità di \textit{close-on-exec} (vedi
sez.~\ref{sec:proc_exec}) sul file. Il flag è
previsto dallo standard POSIX.1-2008, ed è stato
introdotto con il kernel 2.6.23 per evitare una
L'unica differenza fra due file descriptor duplicati è che ciascuno avrà un
suo \textit{file descriptor flag} indipendente. A questo proposito deve essere
tenuto presente che nel caso in cui si usi \func{dup} per duplicare un file
-descriptor, se questo ha il flag di \textit{close-on-exec}
-\itindex{close-on-exec} attivo (vedi sez.~\ref{sec:proc_exec} e
-sez.~\ref{sec:file_fcntl_ioctl}), questo verrà cancellato nel file descriptor
-restituito come copia.
+descriptor, se questo ha il flag di \textit{close-on-exec} attivo (vedi
+sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl_ioctl}), questo verrà
+cancellato nel file descriptor restituito come copia.
L'uso principale di questa funzione è nella shell per la redirezione dei file
standard di tab.~\ref{tab:file_std_files} fra l'esecuzione di una \func{fork}
\end{funcproto}
La funzione è identica a \func{dup2} ma prevede la possibilità di mantenere il
-flag di \textit{close-on-exec} \itindex{close-on-exec} sul nuovo
-file descriptor specificando \const{O\_CLOEXEC} in \param{flags} (che è l'unico
-flag usabile in questo caso). Inoltre rileva esplicitamente la possibile
-coincidenza fra \param{newfd} e \param{oldfd}, fallendo con un errore di
-\errval{EINVAL}.
+flag di \textit{close-on-exec} sul nuovo file descriptor specificando
+\const{O\_CLOEXEC} in \param{flags} (che è l'unico flag usabile in questo
+caso). Inoltre rileva esplicitamente la possibile coincidenza
+fra \param{newfd} e \param{oldfd}, fallendo con un errore di \errval{EINVAL}.
\subsection{Le funzioni di sincronizzazione dei dati}
o \errcode{EMFILE} se il processo ha già raggiunto il massimo numero di
descrittori consentito.
+\itindbeg{close-on-exec}
+
\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
- file descriptor duplicato, in modo da evitare una successiva chiamata con
+ in più attiva il flag di \textit{close-on-exec} sul file descriptor
+ duplicato, in modo da evitare una successiva chiamata con
\const{F\_SETFD}. La funzionalità è stata introdotta con il kernel 2.6.24 ed
è prevista nello standard POSIX.1-2008 (si deve perciò definire
\macro{\_POSIX\_C\_SOURCE} ad un valore adeguato secondo quanto visto in
flags} di \param{fd} in caso di successo o $-1$ in caso di errore, il
terzo argomento viene ignorato. Non sono previsti errori diversi da
\errval{EBADF}. Al momento l'unico flag 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}). Un valore
- nullo significa pertanto che il flag non è impostato.
+ \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}). Un valore nullo significa
+ pertanto che il flag non è impostato.
\item[\const{F\_SETFD}] imposta il valore dei \textit{file descriptor flags}
al valore specificato con \param{arg}, ritorna un valore nullo in caso di
successo e $-1$ in caso di errore. Non sono previsti errori diversi da
\errval{EBADF}. Dato che l'unico flag attualmente usato è quello di
- \itindex{close-on-exec} \textit{close-on-exec}, identificato dalla costante
- \const{FD\_CLOEXEC}, tutti gli altri bit di \param{arg}, anche se impostati,
- vengono ignorati.\footnote{questo almeno è quanto avviene fino al kernel
- 3.2, come si può evincere dal codice della funzione \texttt{do\_fcntl} nel
- file \texttt{fs/fcntl.c} dei sorgenti del kernel.}
+ \textit{close-on-exec}, identificato dalla costante \const{FD\_CLOEXEC},
+ tutti gli altri bit di \param{arg}, anche se impostati, vengono
+ ignorati.\footnote{questo almeno è quanto avviene fino al kernel 3.2, come
+ si può evincere dal codice della funzione \texttt{do\_fcntl} nel file
+ \texttt{fs/fcntl.c} dei sorgenti del kernel.}
+\itindend{close-on-exec}
\item[\const{F\_GETFL}] ritorna il valore dei \textit{file status flags} di
\param{fd} in caso di successo o $-1$ in caso di errore, il terzo argomento
prime, per cui, come illustrato in \cite{LinDevDri}, eventuali operazioni
specifiche che usino lo stesso valore verrebbero ignorate:
\begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{FIOCLEX}] imposta il flag di \itindex{close-on-exec}
- \textit{close-on-exec} sul file, in questo caso, essendo usata come
- operazione logica, \func{ioctl} non richiede un terzo argomento, il cui
- eventuale valore viene ignorato.
-\item[\const{FIONCLEX}] cancella il flag di \itindex{close-on-exec}
- \textit{close-on-exec} sul file, in questo caso, essendo usata come
- operazione logica, \func{ioctl} non richiede un terzo argomento, il cui
- eventuale valore viene ignorato.
+\item[\const{FIOCLEX}] imposta il flag di \textit{close-on-exec} sul file, in
+ questo caso, essendo usata come operazione logica, \func{ioctl} non richiede
+ un terzo argomento, il cui eventuale valore viene ignorato.
+\item[\const{FIONCLEX}] cancella il flag di \textit{close-on-exec} sul file,
+ in questo caso, essendo usata come operazione logica, \func{ioctl} non
+ richiede un terzo argomento, il cui eventuale valore viene ignorato.
\item[\const{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul
file (vedi sez.~\ref{sec:signal_driven_io}); il terzo argomento
deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *})