PDA

Visualizza la versione completa : [?] mappare file in memoria in linux


jurigagarin
14-05-2008, 17:24
ciao a tutti,
sto sviluppando un'applicazione che deve girare sia sotto windows sia sotto linux.
Ho la necessitÓ di mappare un file con un nome scelto a run-time in memoria. In realtÓ non si tratta di un file esistente ma di un area di memoria che pu˛ essere condivisa fra processi ma che non si riferisce a nessun file.
in windows uso le primitive CreateFileMapping e MapViewOfFile nel seguente modo:

HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_R EADWRITE,0,5242880,map);

void *pBuf = MapViewOfFile(hMapFile,FILE_MAP_WRITE,0,0,0);

quindi creo un area di memoria mappata (ovvero condivisibile fra processi con un nome contenuto nella variabile map)

come faccio a fare la stessa cosa in linux?

oregon
14-05-2008, 17:48
Se non sbaglio devi utilizzare la

mmap

... ma consulta man per maggiori dettagli ...

jurigagarin
14-05-2008, 17:58
si probabilmente devo usare la mmap(). la mmap specificando MAP_ANONYMOUS mappa una regione di memoria che in realtÓ non corrisponde a nessun file, e fin qui tutto ok. ma non permette di specificare un nome per tale regione, e visto che io ho pi¨ processi che devono mappare regioni "chiamate" diversamente credo si rischierebbe un'inconsistenza dei dati che ci vado a memorizzare.

shodan
14-05-2008, 19:09
Se non vuoi farlo da te, puoi usare Boost.

http://www.boost.org/doc/libs/1_35_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sha redmemorybetweenprocesses.mapped_file

Loading