Riordinati riferimenti al close-on-exec.
[gapil.git] / fileio.tex
index a0d5475419d740c766d4bfd8493494cb5b78997e..40dcd9f94ee29c3c3206ccca0eefd415b474cdfd 100644 (file)
@@ -1361,16 +1361,22 @@ entrambi. Questo consente una sorta di ``\textsl{sincronizzazione}''
 automatica della posizione sul file fra padre e figlio che occorre tenere
 presente.
 
+\itindbeg{close-on-exec}
+
 Si noti inoltre che in questo caso anche i flag di stato del file, essendo
 mantenuti nella struttura \kstruct{file} della \textit{file table}, vengono
 condivisi, per cui una modifica degli stessi con \func{fcntl} (vedi
 sez.~\ref{sec:file_fcntl_ioctl}) si applicherebbe a tutti processi che
 condividono la voce nella \textit{file table}. Ai file però sono associati
-anche altri flag, dei quali l'unico usato al momento è \constd{FD\_CLOEXEC},
-detti \itindex{file~descriptor~flags} \textit{file descriptor flags}; questi
-invece sono mantenuti in \kstruct{file\_struct}, e perciò sono locali per
-ciascun processo e non vengono modificati dalle azioni degli altri anche in
-caso di condivisione della stessa voce della \textit{file table}.
+anche altri flag detti \itindex{file~descriptor~flags} \textit{file descriptor
+  flags}. Questi invece sono mantenuti in \kstruct{file\_struct}, e perciò
+sono locali per ciascun processo e non vengono modificati dalle azioni degli
+altri anche in caso di condivisione della stessa voce della \textit{file
+  table}; l'unico usato al momento è quello di \textit{close-on-exec} che
+indica che il file descriptor deve essere chiuso in una \func{exec} (vedi
+sez.~\ref{sec:proc_exec}).
+
+\itindend{close-on-exec}
 
 Si tenga presente dunque che in un sistema unix-like è sempre possibile per
 più processi accedere in contemporanea allo stesso file e che non esistono, a
@@ -1467,7 +1473,7 @@ 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} attivo (vedi
-sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl_ioctl}), questo verrà
+sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_shared_access}), questo verrà
 cancellato nel file descriptor restituito come copia.
 
 L'uso principale di questa funzione è nella shell per la redirezione dei file
@@ -2781,7 +2787,7 @@ più sicura l'esecuzione ed evitare la necessità di avere disponibile
 La funzione segue la sintassi delle \textit{at-functions} per indicare il file
 da eseguire, e per il resto si comporta esattamente con come \func{execve} (le
 cui caratteristiche sono già state illustrate in
-sez.~\ref{sec:file_stat}). Diventa così possibile indicare il programma da
+sez.~\ref{sec:proc_exec}). Diventa così possibile indicare il programma da
 eseguire sia con un \textit{pathname} assoluto che relativo (usando
 \const{AT\_FDCWD} come \param{dirfd}), oppure con un \textit{pathname}
 relativo alla directory indicata da \param{dirfd}. In quest'ultima forma l'uso
@@ -2792,10 +2798,11 @@ Inoltre usando, per \param{flags} il valore \const{AT\_EMPTY\_PATH}, si può
 indicare direttamente il file da eseguire aprendolo e passandone il file
 descriptor nell'argomento \param{dirfd}, ottenendo il comportamento di
 \func{fexecve}; quest'ultima infatti è sostanzialmente equivalente
-all'esecuzione di: \includecodesnip{listati/fexecve.c} l'unico altro valore
-utilizzabile per \param{flags} è \const{AT\_SYMLINK\_NOFOLLOW} che fa fallire
-la funzione con un errore di \errval{ELOOP}, se il file indicato è un link
-simbolico.
+all'esecuzione di:
+\includecodesnip{listati/fexecve.c}
+l'unico altro valore utilizzabile per \param{flags} è
+\const{AT\_SYMLINK\_NOFOLLOW}, che fa fallire la funzione con un errore di
+\errval{ELOOP} se il file indicato è un link simbolico.
 
 Quando si usano \func{execveat} o \func{fexecve} per eseguire un programma
 attraverso un file descriptor è naturale impostare sullo stesso il flag di
@@ -2808,7 +2815,7 @@ file descriptor, si potrebbe arrivare all'esaurimento degli stessi.
 
 Tutto questo però non è vero quando si vuole eseguire uno script; in tal caso
 infatti (si ricordi quanto detto a questo riguardo in
-sez.~\ref{sec:file_stat}) il programma che viene effettivamente messo in
+sez.~\ref{sec:proc_exec}) il programma che viene effettivamente messo in
 esecuzione è l'interprete indicato nella riga iniziale dello script, che poi
 legge ed interpreta il codice da eseguire dallo script stesso. Ma se lancia lo
 script usando un file descriptor su cui è attivo il flag di
@@ -2868,9 +2875,11 @@ prototipo è:
 {La funzione ha valori di ritorno diversi a seconda dell'operazione richiesta
   in caso di successo mentre ritorna sempre $-1$ per un errore, nel qual caso
   \var{errno} assumerà valori diversi che dipendono dal tipo di operazione,
-  l'unico valido in generale è:
+  gli unici con signifiato generico sono:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{fd} non è un file aperto.
+  \item[\errcode{EINVAL}] \param{cmd} non è un comando supportato dal kernel
+    corrente.
   \end{errlist}
 }  
 \end{funcproto}
@@ -2898,8 +2907,6 @@ 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[\constd{F\_DUPFD\_CLOEXEC}] ha lo stesso effetto di \const{F\_DUPFD}, ma
   in più attiva il flag di \textit{close-on-exec} sul file descriptor
   duplicato, in modo da evitare una successiva chiamata con
@@ -2909,24 +2916,23 @@ il nome indicato nel precedente prototipo), è riportata di seguito:
   sez.~\ref{sec:intro_gcc_glibc_std}).
 
 \item[\constd{F\_GETFD}] restituisce il valore dei \textit{file descriptor
-    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
-  \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.
+    flags} (vedi sez.~\ref{sec:file_shared_access}) 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 \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[\constd{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
-  \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}
+  (vedi sez.~\ref{sec:file_shared_access}) 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 \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.}
 
 \item[\constd{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