Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
NOM
mremap - Modifier une projection de la memoire virtuelle
SYNOPSIS
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <sys/mman.h>
void *mremap(void *old_address, size_t old_size,
size_t new_size, int flags, ... /* void *new_address */);
DESCRIPTION
mremap() agrandit (ou diminue) une projection (Ndt : mapping) de
memoire virtuelle en memoire reelle, en la deplacant eventuellement
(sous controle de l'argument flags et de la place disponible dans
l'espace d'adressage virtuel).
old_address est l'ancienne adresse du bloc de memoire virtuelle a
agrandir (ou a diminuer). Veuillez noter que old_address doit etre
alignee sur une frontiere de page. old_size est la taille du bloc de
memoire virtuelle. new_size est la taille desiree pour le nouveau bloc
de memoire. Un 5e argument, new_address, peut eventuellement etre
fourni ; voyez la description de MREMAP_FIXED ci-dessous.
Sous Linux, la memoire est divisee en pages. Un processus utilisateur
dispose d'un ou plusieurs segments lineaires de memoire virtuelle. A
chaque segment correspond une ou plusieurs projections dans les pages
de memoire reelle (dans la table des pages). Chaque segment de memoire
virtuelle dispose de ses propres droits d'acces (sa protection), ce qui
peut declencher des fautes de segmentation si la memoire est utilisee
incorrectement (par exemple, en ecrivant dans un segment en lecture
seule). De meme une tentative d'acces a la memoire en-dehors des
segments declenche egalement une faute de segmentation.
mremap() utilise le schema de la table des pages de Linux. mremap()
modifie la correspondance entre les adresses virtuelles et les pages de
memoire reelle. Ce mecanisme peut etre utilise pour implementer un
realloc(3) tres efficace.
L'argument flags est soit 0, soit un OU binaire << | >> avec les
options suivantes :
MREMAP_MAYMOVE
Par defaut, s'il n'y a pas suffisamment d'espace pour agrandir
une projection a son emplacement actuel, mremap() echoue. Si ce
drapeau est utilise, le noyau est autorise a deplacer la
projection a une autre adresse virtuelle si necessaire. Si la
projection est deplacee, les pointeurs absolus vers l'ancienne
projection deviennent invalides (il faut utiliser des
differences par rapport a l'adresse de debut de la projection).
MREMAP_FIXED (depuis Linux 2.3.31)
Ce drapeau a un but similaire a MAP_FIXED pour mmap(2). S'il est
utilise, mremap() prend un cinquieme argument void *new_address
qui contient une adresse alignee sur un debut de page, vers
laquelle la projection doit etre deplacee. Toute projection
existant precedemment dans la zone entre new_address et
new_address+new_size est supprimee. Si MREMAP_FIXED est utilise,
MREMAP_MAYMOVE doit l'etre aussi.
Si le segment de memoire indique par old_address et old_size est
verrouille (par mlock(2) ou similaire), ce verrou est maintenu quand le
segment est modifie et/ou deplace. Par consequent, la quantite de
memoire verrouillee par le processus peut changer.
VALEUR RENVOY'EE
mremap() renvoie un pointeur sur la nouvelle zone de memoire virtuelle
s'il reussit. En cas d'echec, la valeur MAP_FAILED (c'est-a-dire
(void *) -1) est renvoyee et errno contient le code d'erreur.
ERREURS
EAGAIN L'appelant a tente d'agrandir un segment de memoire verrouille,
mais c'est impossible sans depasser la limite RLIMIT_MEMLOCK.
EFAULT Erreur de segmentation (<< Segmentation fault >>). Une adresse
dans l'intervalle entre old_address et old_address+old_size
n'est pas une adresse virtuelle valide pour ce processus. On
peut egalement obtenir EFAULT meme s'il existe des projections
recouvrant la zone complete demandee, mais que ces projections
sont de types differents.
EINVAL Un parametre invalide a ete utilise. Les causes possibles sont
un mauvais alignement de old_address, une valeur differente de
MREMAP_MAYMOVE ou MREMAP_FIXED dans flags, new_size a 0,
new_size ou new_address est invalide, ou la nouvelle zone
specifiee par new_address et new_size recouvre en partie
l'ancienne zone definie par old_address et old_size, ou enfin
utilisation de MREMAP_FIXED sans MREMAP_MAYMOVE.
ENOMEM La zone de memoire ne peut pas etre agrandie a l'emplacement
actuel, et l'option MREMAP_MAYMOVE n'a pas ete fournie dans
flags. Ou encore, il n'y a plus assez de memoire virtuelle
disponible.
CONFORMIT'E
Cet appel systeme est specifique a Linux et ne devrait pas etre employe
dans des programmes destines a etre portables.
NOTES
Avant la version 2.4, la glibc ne fournissait pas la definition de
MREMAP_FIXED et le prototype de mremap() ne permettait pas de passer le
parametre new_address.
VOIR AUSSI
brk(2), getpagesize(2), getrlimit(2), mlock(2), mmap(2), sbrk(2),
malloc(3), realloc(3)
Votre manuel de systemes d'exploitations favori, pour des informations
supplementaires sur la memoire paginee. (Modern Operating Systems de
Andrew S. Tannenbaum, Inside Linux par Randolf Bentson, The Design of
the UNIX Operating System par Maurice J. Bach.)
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.