Condividi tramite


Creazione di una visualizzazione file

Per eseguire il mapping dei dati da un file alla memoria virtuale di un processo, è necessario creare una visualizzazione del file. Le funzioni MapViewOfFile e MapViewOfFileEx usano l'handle dell'oggetto mapping dei file restituito da CreateFileMapping per creare una visualizzazione del file o una parte del file nello spazio indirizzi virtuale del processo. Queste funzioni non riescono se i flag di accesso sono in conflitto con quelli specificati quando CreateFileMapping ha creato l'oggetto di mapping dei file.

La funzione MapViewOfFile restituisce un puntatore alla visualizzazione file. Dereferencing di un puntatore nell'intervallo di indirizzi specificati in MapViewOfFile, un'applicazione può leggere i dati dal file e scrivere dati nel file. La scrittura nella visualizzazione file comporta modifiche all'oggetto mapping dei file. La scrittura effettiva nel file sul disco viene gestita dal sistema. I dati non vengono effettivamente trasferiti al momento della scrittura dell'oggetto mapping dei file. Invece, gran parte dell'input e dell'output del file (I/O) viene memorizzato nella cache per migliorare le prestazioni generali del sistema. Le applicazioni possono eseguire l'override di questo comportamento chiamando la funzione FlushViewOfFile per forzare immediatamente l'esecuzione immediata delle transazioni su disco del sistema.

La funzione MapViewOfFileEx funziona esattamente come la funzione MapViewOfFile , ad eccezione del fatto che consente a un processo di specificare l'indirizzo di base della visualizzazione del file nello spazio indirizzi virtuale del processo nel parametro lpvBase . Se non è presente spazio sufficiente all'indirizzo specificato, la chiamata ha esito negativo. Pertanto, se è necessario eseguire il mapping di un file allo stesso indirizzo in più processi, i processi devono negoziare un indirizzo appropriato: il parametro lpvBase deve essere un multiplo integrale della granularità dell'allocazione della memoria di sistema o la chiamata ha esito negativo. Per ottenere la granularità dell'allocazione della memoria del sistema, usare la funzione GetSystemInfo , che riempie i membri di una struttura SYSTEM_INFO .

Un'applicazione può creare più visualizzazioni file dallo stesso oggetto di mapping file. Una visualizzazione file può essere una dimensione diversa rispetto all'oggetto mapping di file da cui derivata, ma deve essere minore dell'oggetto di mapping dei file. L'offset specificato dai parametri dwOffsetHigh e dwOffsetLow di MapViewOfFile deve essere un multiplo della granularità di allocazione del sistema.

Creazione di una visualizzazione all'interno di un file