secondo la modalità \param{mode}.
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
- errorem nel qual caso \var{errno} viene settata ai valori:
+ errore, nel qual caso \var{errno} viene settata ai valori:
\begin{errlist}
\item[\macro{EAGAIN}] Nessuna operazione è stata completata entro
\param{timeout}.
\label{sec:file_memory_map}
Una modalità alternativa di I/O, che usa una interfaccia completamente diversa
-rispetto a quella classica, è quella dei file \textsl{mappati in memoria}. In
-sostanza quello che si fa è usare il meccanismo della
-\textsl{paginazione}\index{paginazione} usato per la memoria virtuale (vedi
-\secref{sec:proc_mem_gen}) vedere il file in una sezione dello spazio di
-indirizzi del processo, in modo che l'accesso a quest'ultimo avvenga con le
-normali operazioni di lettura e scrittura delle variabili in memoria.
+rispetto a quella classica, è quella dei file \textsl{mappati in memoria} (il
+cosiddetto \textit{memory-mapped I/O}). In sostanza quello che si fa è usare
+il meccanismo della \textsl{paginazione}\index{paginazione} usato per la
+memoria virtuale (vedi \secref{sec:proc_mem_gen}) vedere il file in una
+sezione dello spazio di indirizzi del processo, in modo che l'accesso a
+quest'ultimo avvenga con le normali operazioni di lettura e scrittura delle
+variabili in memoria.
Questa interfaccia è più efficiente dell'uso delle usuali funzioni di I/O, in
quanto permette di caricare in memoria solo le parti del file che sono
il cui solo limite è quello dello spazio di indirizzi disponibile,
+La funzione che permette di attivare il memory mapping di un file è
+\func{mmap}, il suo prototipo è:
+\begin{functions}
+
+ \headdecl{unistd.h}
+ \headdecl{sys/mman.h}
+
+ \funcdecl{void * mmap(void *start, size\_t length, int prot, int flags, int
+ fd, off\_t offset)}
+
+ Esegue la mappatura in memoria del file \param{fd}.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
+ errore nel qual caso \var{errno} viene settata ai valori:
+ \begin{errlist}
+ \item[\macro{EBADF}] Il file descriptor non è valido, e non si è usato
+ \macro{MAP\_ANONYMOUS}.
+ \item[\macro{EACCES}] \macro{MAP\_PRIVATE}.
+ \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+ \end{errlist}
+ ed inoltre \macro{ENOMEM}.}
+\end{functions}
+
+Una volta completate le operazioni di I/O si può eliminare la mappatura della
+memoria usando la funzione \func{munmap}, il cui prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{sys/mman.h}
+
+ \funcdecl{int munmap(void *start, size\_t length)}
+
+ Esegue la mappatura in memoria del file \param{fd}.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
+ errore nel qual caso \var{errno} viene settata ai valori:
+ \begin{errlist}
+ \item[\macro{EBADF}] Il file descriptor non è valido, e non si è usato
+ \macro{MAP\_ANONYMOUS}.
+ \item[\macro{EACCES}] \macro{MAP\_PRIVATE}.
+ \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+ \end{errlist}
+ ed inoltre \macro{ENOMEM}.}
+\end{functions}
\section{Il file locking}
-
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "gapil"