| mmap | |||
Nommmap, 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 DescriptionLa fonction mmap demande la projection en mémoire de length octets commencant à la position offset depuis un fichier (ou un autre objet) indiqué par le descripteur 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, et ne doit pas entrer en conflit avec le mode d'ouverture du fichier. Les protections possibles sont les suivantes :
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 être partagées avec les autres références. Les options sont :
Vous devez indiquer soit MAP_SHARED, soit MAP_PRIVATE. Ces trois attributs sont décrits dans POSIX.1b (anciennement POSIX.4). Linux propose également les options MAP_DENYWRITE, MAP_EXECUTABLE MAP_NORESERVE, MAP_LOCKED MAP_GROWSDOWN et MAP_ANON(YMOUS). L'argument offset doit normalement être un multiple de la taille de page renvoyée par l'appel getpagesize(2) . 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. La projection est aussi automatiquement détruite lorsque le processue se termine. À l'inverse, la fermeture du descripteur de fichier ne supprime pas la projection.
Valeur Renvoyéemmap 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 renvoyé et errno contient le code d'erreur (probablement EINVAL). Erreurs
L'accès à une zone de projection peut déclencher les signaux suivants :
ConformitéSVr4, POSIX.1b (anciennement POSIX.4), BSD 4.4. SVr4 documente les codes d'erreur supplémentaires ENXIO et ENODEV.Voir Aussigetpagesize(2) , msync(2) , shm_open(2) , B.O. Gallmeister, POSIX.4, O'Reilly, pp. 119-124 et 365-369.
TraductionChristophe Blaess, 1997.
|