Next: La funzione msync
Up: Mappare i files in
Previous: Mappare i files in
Indice
Indice analitico
Function: void * mmap (void *ADDRESS, size_t LENGTH,int PROTECT, int
FLAGS, int FILEDES, off_t OFFSET)
Questa funzione non è proprio intuitiva e necessita di chiarimenti in merito agli
argomenti da passare. Cominciamo con gli argomenti inerenti il file da mappare
identificato dal filedescriptor FILEDES. Si può infatti decidere di mappare
il file a partitire dall'offset OFFSET fino alla posizione
identificata da OFFSET+LENGTH-1. Gli argomenti restanti riguradano la
memoria su cui il file verrà mappato. ADDRESS identifica un indirizzo di
memoria a partire dal quale si vorrebbe (se quella memoria è disponibile) mappare
il file. Tale idirizzo (in caso di memoria non disponibile) verrà automaticamente
cambiato a meno che non si sia specificato il FLAG MAP_FIXED, in questo
caso la chiamata fallirebbe. L'argomento PROTECT specifica quale
genere di accesso è permesso alla memoria mappata, può assumere i seguenti
valori:
- PROT_READ: accesso permesso in lettura;
- PROT_WRITE: accesso permesso in scrittura;
- PROT_EXEC: accesso permesso in esecuzione;
L'argomento FLAGS può però assumere una serie di valori:
- MAP_PRIVATE
Fa in modo che i cambianti (scritture) sul file mappato in memoria non si
riflettano sul file memorizzato sul supporto magnetico. (da vedere,
non sono molto sicuro). Uno tra MAP_PRIVATE e MAP_SHARED
deve essere usato.
- MAP_SHARED
I cambiamenti sul file in memoria si riflettono sul relativo
file sul supporto magnetico. (da vedere,
non sono molto sicuro). Uno tra MAP_PRIVATE e MAP_SHARED
deve essere usato.
- MAP_FIXED
Visto in precedenza.
- MAP_ANONYMOUS
Viene creata una regione di memoria non direttamente connessa ad alcun file.
Gli argomenti FILEDES e OFFSET vengono dunque ignorati e la
regione di memoria viene rimpita con 0; Un'utilizzo molto comune di questo
tipo di regione di memoria è la condivisione di di dati tra vari tasks.
Viene ritornato -1 in caso di errore e la variabile errno può assumere
uno dei seguenti valori:
- EINVAL
Nel caso in cui ADDRESS non si usabile o si siano passati flags
inconsistenti.
- EACCES
FILEDES non permette l'accesso specificato da PROTECT.
- ENOMEM
Non c'è abbastanza memoria per il mapping. (oppure il processo ??????).
- ENODEV
Il file non supporta il mapping.
- ENOEXEC
Il file risiede in un filesystem che non supporta il mapping.
Next: La funzione msync
Up: Mappare i files in
Previous: Mappare i files in
Indice
Indice analitico
blacksheep &
2006-11-22