PDA

View Full Version : [C - Unix] uso di mmap()


fpucci
15-09-2006, 13:52
Devo usare mmap() per gestire files di grosse dimensioni (> 2Gb) direttamente in memoria.

Tuttavia non capisco come si deve usare.

1) Ho una applicazione che mappa il file, in memoria, in sola lettura.
Uso i seguenti parametri:
fpm = mmap (NULL, FileLen, PROT_READ, MAP_PRIVATE, fd, 0);

e funziona tutto bene.

2) Ho una seconda applicazione che deve leggere e SCRIVERE. Quindi faccio:
fpm = mmap (NULL, FileLen, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

In 2) ho visto che se uso MAP_PRIVATE, quando vado a fare munmap, oppure msync, non mi aggiorna i dati su file. Quindi sono costretto ad usare MAP_SHARED.

Vi chiedo: ho capito male io, oppure l'unico modo per SCRIVERE nel file mapped è usare MAP_SHARED, oltre che PROT_WRITE?

Pensavo di utiolizzare la modalità MAP_PRIVATE in quanto non ho la necessità di condividere i dati nel file con altri processi. Il file viene elaborato solo da un processo. Penso, e correggetemi se sbaglio, usando MAP_SHARED viene allocata memoria sullo swap file (come avviene per le SHARED MEMORY) anziché nel data segment del processo.

Spero di venire illuminato da chi ha utilizzato questa funzione. :-)
Grazie