X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileio.tex;h=f23053d9999fea8769faa1a7e2b6009d5dd1be81;hp=3d855263b513c6ae2e901205824b9a8d981f697a;hb=6760429dc70f868716393c4413c5450b0649869b;hpb=18f401b26dcb222f30925a0cf03cca8db52495cb diff --git a/fileio.tex b/fileio.tex index 3d85526..f23053d 100644 --- a/fileio.tex +++ b/fileio.tex @@ -514,8 +514,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il 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 @@ -1307,10 +1306,9 @@ che quello che viene modificato è lo stesso campo nella voce della 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} @@ -1420,11 +1418,10 @@ un file descriptor reimpostandone i flag, per usarla occorre definire la macro \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} @@ -1938,9 +1935,11 @@ il nome indicato nel precedente prototipo), è riportata di seguito: 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 @@ -1950,20 +1949,21 @@ il nome indicato nel precedente prototipo), è riportata di seguito: 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 @@ -2346,14 +2346,12 @@ sono definite nel kernel a livello generale, e vengono sempre interpretate per 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 *})