Materiale su posix_fadvise
[gapil.git] / fileadv.tex
index dc5bcb8f0a32f586484783ffde7f7eafeb6f8c37..d10d6f29bdef34fc36101e4a9ca42d5435a5270f 100644 (file)
@@ -2351,7 +2351,7 @@ effettive del file o della sezione che si vuole mappare.
 
 \begin{figure}[!htb] 
   \centering
-  \includegraphics[width=13cm]{img/mmap_boundary}
+  \includegraphics[height=6cm]{img/mmap_boundary}
   \caption{Schema della mappatura in memoria di una sezione di file di
     dimensioni non corrispondenti al bordo di una pagina.}
   \label{fig:file_mmap_boundary}
@@ -2394,7 +2394,7 @@ che sono utilizzabili solo con questa interfaccia.
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=13cm]{img/mmap_exceed}
+  \includegraphics[height=6cm]{img/mmap_exceed}
   \caption{Schema della mappatura in memoria di file di dimensioni inferiori
     alla lunghezza richiesta.}
   \label{fig:file_mmap_exceed}
@@ -3131,7 +3131,7 @@ file destinazione. Il passo successivo 
 (\texttt{\small 18--22}), quello di destinazione (\texttt{\small 23--27}) ed
 infine (\texttt{\small 28--31}) la \textit{pipe} che verrà usata come buffer.
 
-\begin{figure}[!htbp]
+\begin{figure}[!phtb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
     \includecodesample{listati/splicecp.c}
@@ -3379,9 +3379,10 @@ nell'I/O su disco, il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\errcode{EBADF}] \param{fd} non è valido o non è aperto in lettura.
-    \item[\errcode{EINVAL}] \param{fd} si riferisce ad un tipo di file che non
-      supporta l'operazione (come una pipe o un socket)..
+    \item[\errcode{EBADF}] l'argomento \param{fd} non è un file descriptor
+      valido o non è aperto in lettura.
+    \item[\errcode{EINVAL}] l'argomento \param{fd} si riferisce ad un tipo di
+      file che non supporta l'operazione (come una pipe o un socket).
     \end{errlist}
   }
 \end{functions}
@@ -3405,14 +3406,15 @@ dati saranno necessari in seguito. Si potr
 momento (ad esempio in fase di inizializzazione) la lettura, così da ottenere
 una migliore risposta nelle operazioni successive.
 
-Il concetto di \func{readahead} viene generalizzato da
-\funcd{posix\_fadvise},\footnote{al contario di \func{readahead} la funzione è
-  definita nello standard POSIX.1-2001 (anche se l'argomento \param{len} è
-  stato modificato da \ctyp{size\_t} a \ctyp{off\_t} nella revisione
-  POSIX.1-2003 TC5), però è disponibile su Linux a partire dai kernel della
-  serie 2.6.} che consente di ``\textsl{avvisare}'' il kernel sulle modalità
-con cui si intende accedere nel futuro ad una certa porzione di un file, così
-che esso possa provvedere le opportune ottimizzazioni; il suo prototipo è:
+Il concetto di \func{readahead} viene generalizzato nello standard
+POSIX.1-2001 dalla funzione \funcd{posix\_fadvise},\footnote{anche se
+  l'argomento \param{len} è stato modificato da \ctyp{size\_t} a \ctyp{off\_t}
+  nella revisione POSIX.1-2003 TC5.} che consente di ``\textsl{avvisare}'' il
+kernel sulle modalità con cui si intende accedere nel futuro ad una certa
+porzione di un file,\footnote{la funzione però è stata introdotta su Linux
+  solo a partire dal kernel 2.5.60.}  così che esso possa provvedere le
+opportune ottimizzazioni; il suo prototipo, che può è disponibile solo se si
+definisce la macro \macro{\_XOPEN\_SOURCE} ad almeno 600, è:
 \begin{functions}  
   \headdecl{fcntl.h} 
 
@@ -3423,13 +3425,52 @@ che esso possa provvedere le opportune ottimizzazioni; il suo prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\errcode{EBADF}] \param{fd} non è valido o non è aperto in lettura.
-    \item[\errcode{EINVAL}] \param{fd} si riferisce ad un tipo di file che non
-      supporta l'operazione (come una pipe o un socket)..
+    \item[\errcode{EBADF}] l'argomento \param{fd} non è un file descriptor
+      valido.
+    \item[\errcode{EINVAL}] il valore di \param{advice} non è valido o
+      \param{fd} si riferisce ad un tipo di file che non supporta l'operazione
+      (come una pipe o un socket).
     \end{errlist}
+    \item[\errcode{ESPIPE}] previsto dallo standard se \param{fd} è una pipe o
+      un socket (ma su Linux viene restituito \errcode{EINVAL}).
   }
 \end{functions}
 
+La funzione dichiara al kernel le modalità con cui intende accedere alla
+regione del file indicato da \param{fd} che inizia alla posizione
+\param{offset} e si estende per \param{len} byte. Se per \param{len} si usa un
+valora nullo la regione coperta sarà da \param{offset} alla fine del
+file.\footnote{questo è vero solo per le versioni più recenti, fino al kernel
+  2.6.6 il valore nullo veniva interpretato letteralmente.} Le modalità sono
+indicate dall'argomento \param{advice} che è una maschera binaria dei valori
+illustrati in tab.~\ref{tab:posix_fadvise_flag}. Si tenga presente comunque
+che la funzione dà soltanto un avvertimento, non esiste nessun vincolo per il
+kernel, che utilzza semplicemente l'informazione.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|p{10cm}|}
+    \hline
+    \textbf{Valore} & \textbf{Significato} \\
+    \hline
+    \hline
+    \const{POSIX\_FADV\_NORMAL} & Non ci sono avvisi specifici da fare
+                                  riguardo le modalità di accesso, il
+                                  comportamento sarà identico a quello che si
+                                  avrebbe senza nessun avviso.\\ 
+    \const{POSIX\_FADV\_SEQUENTIAL} & .\\ 
+    \const{POSIX\_FADV\_RANDOM} & .\\ 
+    \const{POSIX\_FADV\_NOREUSE} & .\\ 
+    \const{POSIX\_FADV\_WILLNEED} & .\\ 
+    \const{POSIX\_FADV\_DONTNEED} & .\\ 
+    \hline
+  \end{tabular}
+  \caption{Valori dei bit dell'argomento \param{advice} di
+    \func{posix\_fadvise} che indicano la modalità con cui si intende accedere
+    ad un file.} 
+  \label{tab:posix_fadvise_flag}
+\end{table}