Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       mremap - Modifier une projection de la mémoire 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 mémoire virtuelle en mémoire réelle, en
       la déplaçant éventuellement (sous contrôle de l'argument flags et de la place  disponible  dans  l'espace
       d'adressage virtuel).

       old_address  est  l'ancienne  adresse  du  bloc de mémoire virtuelle à agrandir (ou à diminuer). Veuillez
       noter que old_address doit être alignée sur une frontière de page. old_size est  la  taille  du  bloc  de
       mémoire  virtuelle.  new_size  est  la  taille  désirée  pour le nouveau bloc de mémoire. Un 5e argument,
       new_address, peut éventuellement être fourni ; voyez la description de MREMAP_FIXED ci-dessous.

       Sous Linux, la mémoire est divisée en pages. Un processus utilisateur dispose d'un ou plusieurs  segments
       linéaires  de  mémoire virtuelle. À chaque segment correspond une ou plusieurs projections dans les pages
       de mémoire réelle (dans la table des pages). Chaque segment de mémoire virtuelle dispose de  ses  propres
       droits  d'accès  (sa  protection),  ce  qui  peut déclencher des fautes de segmentation si la mémoire est
       utilisée incorrectement (par exemple, en écrivant  dans  un  segment  en  lecture  seule).  De  même  une
       tentative d'accès à la mémoire en‐dehors des segments déclenche également une faute de segmentation.

       mremap()  utilise  le schéma de la table des pages de Linux. mremap() modifie la correspondance entre les
       adresses virtuelles et les pages de mémoire réelle. Ce mécanisme peut être utilisé  pour  implémenter  un
       realloc(3) très efficace.

       L'argument flags est soit 0, soit un OU binaire « | » avec les options suivantes :

       MREMAP_MAYMOVE
              Par  défaut,  s'il  n'y a pas suffisamment d'espace pour agrandir une projection à son emplacement
              actuel, mremap() échoue. Si ce drapeau est utilisé, le noyau est autorisé à déplacer la projection
              à  une autre adresse virtuelle si nécessaire. Si la projection est déplacée, les pointeurs absolus
              vers l'ancienne projection deviennent invalides (il faut utiliser des différences  par  rapport  à
              l'adresse de début de la projection).

       MREMAP_FIXED (depuis Linux 2.3.31)
              Ce  drapeau  a  un  but  similaire  à  MAP_FIXED pour mmap(2). S'il est utilisé, mremap() prend un
              cinquième argument void *new_address qui contient une adresse alignée sur un début de  page,  vers
              laquelle  la  projection  doit  être déplacée. Toute projection existant précédemment dans la zone
              entre  new_address  et  new_address+new_size  est  supprimée.   Si   MREMAP_FIXED   est   utilisé,
              MREMAP_MAYMOVE doit l'être aussi.

       Si  le segment de mémoire indiqué par old_address et old_size est verrouillé (par mlock(2) ou similaire),
       ce verrou est maintenu quand le segment est modifié et/ou déplacé. Par conséquent, la quantité de mémoire
       verrouillée par le processus peut changer.

VALEUR RENVOYÉE

       mremap()  renvoie  un pointeur sur la nouvelle zone de mémoire virtuelle s'il réussit. En cas d'échec, la
       valeur MAP_FAILED (c'est-à-dire (void *) -1) est renvoyée et errno contient le code d'erreur.

ERREURS

       EAGAIN L'appelant a tenté d'agrandir un  segment  de  mémoire  verrouillé,  mais  c'est  impossible  sans
              dépasser 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
              également  obtenir  EFAULT  même s'il existe des projections recouvrant la zone complète demandée,
              mais que ces projections sont de types différents.

       EINVAL Un paramètre invalide  a  été  utilisé.  Les  causes  possibles  sont  un  mauvais  alignement  de
              old_address,  une  valeur  différente  de MREMAP_MAYMOVE ou MREMAP_FIXED dans flags, new_size à 0,
              new_size ou new_address est invalide, ou la nouvelle zone spécifiée par  new_address  et  new_size
              recouvre  en  partie  l'ancienne zone définie par old_address et old_size, ou enfin utilisation de
              MREMAP_FIXED sans MREMAP_MAYMOVE.

       ENOMEM La zone de mémoire ne peut pas être agrandie à l'emplacement actuel,  et  l'option  MREMAP_MAYMOVE
              n'a pas été fournie dans flags. Ou encore, il n'y a plus assez de mémoire virtuelle disponible.

CONFORMITÉ

       Cet  appel  système  est spécifique à Linux et ne devrait pas être employé dans des programmes destinés à
       être portables.

NOTES

       Avant la version 2.4, la glibc ne fournissait pas la  définition  de  MREMAP_FIXED  et  le  prototype  de
       mremap() ne permettait pas de passer le paramètre new_address.

VOIR AUSSI

       brk(2), getpagesize(2), getrlimit(2), mlock(2), mmap(2), sbrk(2), malloc(3), realloc(3)

       Votre  manuel  favori  à  propos de systèmes d'exploitation, pour des informations supplémentaires sur la
       mémoire paginée : Modern Operating Systems de Andrew S. Tanenbaum, 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.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction de
       Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org>  ou  par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».