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 mapping di file.

Per condividere un file, il primo processo crea o apre un file utilizzando la funzione CreateFile . Successivamente, viene creato un oggetto mapping di file utilizzando la funzione CreateFileMapping , specificando l'handle di file e un nome per l'oggetto mapping di file. I nomi degli oggetti evento, semaforo, mutex, timer waitable, processo e mapping file condividono lo stesso spazio dei nomi. Pertanto, le funzioni CreateFileMapping e OpenFileMapping hanno esito negativo se specificano un nome usato da un oggetto di un altro tipo.

Per condividere memoria non associata a un file, un processo deve usare la funzione CreateFileMapping e specificare un _ valore di handle non valido _ 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. Quando si specifica un valore di handle non valido _ _ in una chiamata a CreateFileMapping, è necessario specificare una dimensione maggiore di zero.

Il modo più semplice per ottenere un handle dell'oggetto mapping dei file creato dal primo processo da parte di altri processi consiste nell'utilizzare la funzione OpenFileMapping e specificare il nome dell'oggetto. Questa operazione viene definita memoria condivisa denominata. Se l'oggetto di mapping dei file non dispone di un nome, il processo deve ottenere un handle tramite l'ereditarietà o la duplicazione. Per ulteriori informazioni sull'ereditarietà e la duplicazione, vedere ereditarietà.

I processi che condividono file o memoria devono creare visualizzazioni di file tramite la funzione MapViewOfFile o MapViewOfFileEx . Devono coordinare l'accesso tramite semafori, mutex, eventi o altre tecniche di esclusione reciproca. Per ulteriori informazioni, vedere sincronizzazione.

Un oggetto mapping dei file condivisi non verrà eliminato definitivamente fino a quando tutti i processi che lo usano non ne chiuderanno gli handle usando la funzione CloseHandle .

Per informazioni sulla sicurezza degli oggetti di mapping dei file, vedere sicurezza e accesso ai file.

Creazione di una memoria condivisa denominata