inixio fcntl
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 13 Feb 2012 08:57:20 +0000 (08:57 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 13 Feb 2012 08:57:20 +0000 (08:57 +0000)
fileio.tex

index bb5c99b3129ee05225655761a4d7761f69845d41..27681b709da283536a52675d8c09d117ece8c4d0 100644 (file)
@@ -1875,8 +1875,8 @@ funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si
   \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}
@@ -1912,27 +1912,32 @@ per \var{cmd} è riportata di seguito:
   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
@@ -1955,21 +1960,25 @@ per \var{cmd} è riportata di seguito:
     (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