essere utile per il linker dinamico, in particolare quando viene effettuato
il \textit{prelink} delle applicazioni.}
-\itindend{memory~mapping}
+Per i vantaggi illustrati all'inizio del paragrafo l'interfaccia del
+\textit{memory mapped I/O} viene usata da una grande varietà di programmi,
+spesso con esigenze molto diverse fra di loro riguardo le modalità con cui
+verranno eseguiti gli accessi ad un file; è ad esempio molto comune per i
+database effettuare accessi ai dati in maniera pressoché casuale, mentre un
+riproduttore audio o video eseguirà per lo più letture sequenziali.
+
+Per migliorare le prestazioni a seconda di queste modalità di accesso è
+disponibile una apposita funzione, \funcd{madvise},\footnote{tratteremo in
+ sez.~\ref{sec:file_fadvise} le funzioni che consentono di ottimizzare
+ l'accesso ai file con l'interfaccia classica.} che consente di fornire al
+kernel delle indicazioni su dette modalità, così che possano essere adottate
+le opportune strategie di ottimizzazione. Il suo prototipo è:
+\begin{functions}
+ \headdecl{sys/mman.h}
+
+ \funcdecl{int madvise(void *start, size\_t length, int advise)}
+
+ Fornisci indicazioni sull'uso di un \textit{memory mapping}.
+
+ \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{EAGAIN}] .
+ \item[\errcode{EBADF}] .
+ \item[\errcode{EINVAL}] .
+ \item[\errcode{EIO}] .
+ \item[\errcode{ENOMEM}] .
+ \end{errlist}
+ }
+\end{functions}
+
+
% TODO documentare \func{madvise}
+\itindend{memory~mapping}
+
\subsection{I/O vettorizzato: \func{readv} e \func{writev}}
\label{sec:file_multiple_io}