Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       mremap - Modifier une projection de la memoire virtuelle

SYNOPSIS

       #define _GNU_SOURCE
       #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), feature_test_macros(7)

       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.27  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> >>.