Aggiunti un po' di prototipi
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 1 Aug 2002 23:23:14 +0000 (23:23 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 1 Aug 2002 23:23:14 +0000 (23:23 +0000)
fileadv.tex

index 9adbf64..7a47057 100644 (file)
@@ -714,7 +714,7 @@ lettura o scrittura; il suo prototipo 
   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}.
@@ -830,12 +830,13 @@ Essi verranno letti (o scritti) nell'ordine in cui li si sono specificati.
 \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
@@ -855,6 +856,49 @@ vengono scritte sulla swap; questo consente di accedere ai file su dimensioni
 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}
@@ -899,7 +943,6 @@ Il \textit{mandatory locking} 
 
 
 
-
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"