Condivisione di file e memoria
Il mapping dei file può essere usato per condividere un file o una memoria tra due o più processi. Per condividere un file o una memoria, tutti i processi devono usare il nome o l'handle dello stesso oggetto di mapping file.
Per condividere un file, il primo processo crea o apre un file usando la funzioneCreateFile. Crea quindi un oggetto di mapping di file usando la funzione CreateFileMapping, specificando l'handle di file e un nome per l'oggetto di mapping file. I nomi degli oggetti event, semaphore, mutex, waitable timer, job e file mapping condividono lo stesso spazio dei nomi. Pertanto, le funzioni CreateFileMa pping e OpenFileMapping hanno esito negativo se specificano un nome in uso da un oggetto di un altro tipo.
Per condividere la memoria non associata a un file, un processo deve usare la funzione CreateFileMapping e specificare INVALID_HANDLE_VALUE come parametro hFile anziché come handle di file esistente. L'oggetto di mapping file corrispondente accede alla memoria gestita dal file di paging del sistema. È necessario specificare una dimensione maggiore di zero quando si specifica un hFile di INVALID_HANDLE_VALUE in una chiamata a CreateFileMapping.
Il modo più semplice per altri processi per ottenere un handle dell'oggetto di mapping file creato dal primo processo consiste nell'usare la funzione OpenFileMapping e specificare il nome dell'oggetto. Questa è denominata memoria condivisa . Se l'oggetto di mappatura del file non ha un nome, il processo deve ottenere un handle ad esso tramite ereditarietà o duplicazione. Per altre informazioni sull'ereditarietà e la duplicazione, vedere Ereditarietà.
I processi che condividono file o memoria devono creare visualizzazioni file usando la funzione MapViewOfFile o MapViewOfFileEx. Devono coordinare l'accesso usando semafori, mutex, eventi o altre tecniche di esclusione reciproca. Per altre informazioni, vedere Synchronization.
Un oggetto di mapping di file condiviso non sarà distrutto finché tutti i processi che lo utilizzano non avranno chiuso i loro handle ad esso usando la funzione CloseHandle.
Per informazioni sulla sicurezza e sui diritti di accesso relativi al file mapping, vedere Sicurezza e diritti di accesso al file mapping.
Argomenti correlati