From: Simone Piccardi Date: Thu, 1 Aug 2002 23:23:14 +0000 (+0000) Subject: Aggiunti un po' di prototipi X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=5c88e6587e9e392c26ba943c719be9caf7fab0d9;ds=sidebyside Aggiunti un po' di prototipi --- diff --git a/fileadv.tex b/fileadv.tex index 9adbf64..7a47057 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -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"