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 di file.
Per condividere un file, il primo processo crea o apre un file usando la funzione CreateFile . 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 dei file. I nomi degli oggetti event, semaphore, mutex, waitable timer, job e file mapping condividono lo stesso spazio dei nomi. Pertanto, le funzioni CreateFileMapping 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 dei file corrispondente accede alla memoria supportata 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 operazione viene definita memoria condivisa denominata . Se l'oggetto di mapping del file non ha un nome, il processo deve ottenere un handle 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 Sincronizzazione.
Un oggetto mapping di file condiviso non verrà eliminato definitivamente finché tutti i processi che lo usano chiuderanno usando la funzione CloseHandle .
Per informazioni sulla sicurezza degli oggetti di mapping dei file, vedere Sicurezza e diritti di accesso per mapping dei file.
Argomenti correlati