MMAP(2)

NOM
mmap, munmap - Etablir / supprimer une projection en memoire (map / unmap) des fichiers ou des peripheriques.

SYNOPSIS
#include <unistd.h>
#include <sys/mman.h>

#ifdef _POSIX_MAPPED_FILES

void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);

int munmap(void *start, size_t length);

#endif

DESCRIPTION
La fonction mmap demande la projection en memoire de length octets commencant a la position offset depuis un fichier (ou un autre objet) indique par fd, de preference a l'adresse pointee par start. Cette adresse n'est qu'une preference, generalement 0. La veritable adresse ou l'objet est projete est renvoyee par la fonction mmap. L'argument prot indique la protection que l'on desire pour cette zone de memoire. Les protections possibles sont les suivantes :

PROT_EXEC
    On peut executer du code dans la zone memoire.

PROT_READ
    On peut lire le contenu de la zone memoire

PROT_WRITE
    On peut ecrire dans la zone memoire.

PROT_NONE
    Le contenu de la zone memoire est innaccessible.

Le parametre flags indique le type de fichier projete, les options de projection, et si les modifications faites sur la portion projetee sont privees ou doivent etre partagees avec les autres references. Les options sont :

MAP_FIXED
    N'utiliser que l'adresse indiquee. Si c'est impossible, mmap echouera. Si MAP_FIXED est specifie start doit etre un multiple de la longueur de page. Il est deconseille d'utiliser cette option.

MAP_SHARED
    Partager la projection avec tout autre processus utilisant l'objet.

MAP_PRIVATE
    Creer une projection privee, utilisant la methode de copie a l'ecriture.

Vous devez indiquer soit MAP_SHARED, soit MAP_PRIVATE. Ces trois attributs sont decrits dans POSIX.1b (anciennement POSIX.4). Linux propose egalement les options MAP_DENYWRITE, MAP_EXECUTABLE et MAP_ANON(YMOUS). L'appel systeme munmap detruit la projection dans la zone de memoire specifiee, et s'arrange pour que toute reference ulterieure a cette zone memoire declenche une erreur d'adressage.

VALEUR RENVOYEE
mmap renvoie un pointeur sur la zone de memoire, s'il reussit. En cas d'echec il retourne MAP_FAILED (-1) et errno contient le code d'erreur. munmap renvoie 0 s'il reussit. En cas d'echec -1 est renvoye et errno contient le code d'erreur (probablement EINVAL).

ERREURS

EBADF
    fd n'est pas un descripteur de fichier valide (et MAP_ANONYMOUS n'etait pas precise).

EACCES
    On demande une projection privee MAP_PRIVATE mais fd n'est pas ouvert en lecture, ou on demande une projection partagee MAP_SHARED avec protection PROT_WRITE, mais fd n'est pas ouvert en ecriture.

EINVAL
    start ou length ou offset sont invalides. (par exemple : zone trop grande, ou non alignee sur une frontiere de page).

ETXTBUSY
    MAP_DENYWRITE a ete reclame mais fd est ouvert en ecriture

EAGAIN
    Le fichier est verrouille, ou trop de memoire est verrouillee.

ENOMEM
    pas assez de memoire.

CONFORMITE
SVr4, POSIX.1b (anciennement POSIX.4), BSD 4.4. SVr4 documente les codes d'erreur supplementaires ENXIO et ENODEV.

VOIR AUSSI
getpagesize(2), msync(2), shm_open(2), B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.