MMAP(2) Manuel du programmeur Linux MMAP(2)
NOM
mmap, munmap - Etablir / supprimer une projection en
mémoire (map / unmap) des fichiers ou des périphériques.
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 mémoire de
length octets commencant à la position offset depuis un
fichier (ou un autre objet) indiqué par fd, de préférence
à l'adresse pointée par start. Cette adresse n'est qu'une
préférence, généralement 0. La véritable adresse où
l'objet est projeté est renvoyée par la fonction mmap.
L'argument prot indique la protection que l'on désire pour
cette zone de mémoire. Les protections possibles sont les
suivantes :
PROT_EXEC
On peut exécuter du code dans la zone mémoire.
PROT_READ
On peut lire le contenu de la zone mémoire
PROT_WRITE
On peut écrire dans la zone mémoire.
PROT_NONE
Le contenu de la zone memoire est inaccessible.
Le paramètre flags indique le type de fichier projeté, les
options de projection, et si les modifications faites sur
la portion projetée sont privées ou doivent etre partagées
avec les autres références. Les options sont :
MAP_FIXED
N'utiliser que l'adresse indiquée. Si c'est impos
sible, mmap échouera. Si MAP_FIXED est spécifié
start doit être un multiple de la longueur de page.
Il est déconseillé d'utiliser cette option.
MAP_SHARED
Partager la projection avec tout autre processus
Linux 19 Juillet 1997 1
MMAP(2) Manuel du programmeur Linux MMAP(2)
utilisant l'objet.
MAP_PRIVATE
Créer une projection privée, utilisant la méthode
de copie à l'écriture.
Vous devez indiquer soit MAP_SHARED, soit MAP_PRIVATE.
Ces trois attributs sont décrits dans POSIX.1b (ancien
nement POSIX.4). Linux propose également les options
MAP_DENYWRITE, MAP_EXECUTABLE et MAP_ANON(YMOUS).
L'appel système munmap détruit la projection dans la zone
de mémoire spécifiée, et s'arrange pour que toute
référence ultérieure à cette zone mémoire déclenche une
erreur d'adressage.
VALEUR RENVOYÉE
mmap renvoie un pointeur sur la zone de mémoire, s'il
réussit. En cas d'échec il retourne MAP_FAILED (-1) et
errno contient le code d'erreur.
munmap renvoie 0 s'il réussit. En cas d'échec -1 est ren
voyé et errno contient le code d'erreur (probablement EIN
VAL).
ERREURS
EBADF fd n'est pas un descripteur de fichier valide (et
MAP_ANONYMOUS n'était pas précisé).
EACCES On demande une projection privée MAP_PRIVATE mais
fd n'est pas ouvert en lecture, ou on demande une
projection partagée 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 alignée sur une
frontière de page).
ETXTBUSY
MAP_DENYWRITE a été réclamé mais fd est ouvert en
écriture
EAGAIN Le fichier est verrouillé, ou trop de mémoire est
verrouillée.
ENOMEM pas assez de mémoire.
CONFORMITÉ
SVr4, POSIX.1b (anciennement POSIX.4), BSD 4.4. SVr4 docu
mente les codes d'erreur supplémentaires ENXIO et ENODEV.
Linux 19 Juillet 1997 2
MMAP(2) Manuel du programmeur Linux MMAP(2)
VOIR AUSSI
getpagesize(2), msync(2), shm_open(2), B.O. Gallmeister,
POSIX.4, O'Reilly, pp. 128-129 and 389-391.
TRADUCTION
Christophe Blaess, 1997.
Linux 19 Juillet 1997 3