Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       remap_file_pages - Créer une projection non linéaire d'un fichier

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #define _GNU_SOURCE         /* Consultez feature_test_macros(7) */
       #include <sys/mman.h>

       [[obsolète]] int remap_file_pages(void addr[.size], size_t size,
                                           int prot, size_t pgoff, int flags);

DESCRIPTION

       Note :  cet  appel système a été indiqué comme obsolète à partir de Linux 3.16. Dans Linux
       4.0, l'implémentation a été remplacée par une émulation plus lente dans le noyau.  Le  peu
       d'applications  qui  utilisent  cet  appel  système  devraient  envisager  de passer à des
       alternatives. Ce changement a eu lieu, car le code du noyau de  cet  appel  système  était
       complexe et, semble-t-il, peu utilisé voire inusité. S'il avait quelques cas d'utilisation
       dans des applications de base de données sur des systèmes 32 bits, ces cas n'existent plus
       sur des systèmes 64 bits.

       L'appel  système  remap_file_pages()  est  utilisé pour créer une projection non linéaire,
       c'est-à-dire une projection dans laquelle les pages du fichier sont projetées  en  mémoire
       dans  un  ordre  non séquentiel. L'avantage d'utiliser remap_file_pages() au lieu de faire
       des appels répétés à mmap(2) est que la première approche n'impose pas au noyau  de  créer
       des   structures   de   données   VMA  (Virtual  Memory  Area :  zone  mémoire  virtuelle)
       supplémentaires.

       Pour créer une projection non linéaire, nous allons effectuer les étapes suivantes :

       1. Utiliser mmap(2) pour créer une  projection  (qui  est  initialement  linéaire).  Cette
          projection doit être créée avec l'attribut MAP_SHARED.

       2. Utiliser un ou plusieurs appels à remap_file_pages() pour réorganiser la correspondance
          entre les pages de la projection et les pages du fichier. Il est possible  d'accéder  à
          la même page d'un fichier dans plusieurs endroits de la région projetée.

       Les  paramètres  pgoff  et  size  spécifient  la  région  du  fichier  à  reloger  dans la
       projection : pgoff est un décalage de fichier (Ndt : file offset) dans l'unité  de  taille
       de page du système ; size est la longueur de la région en octets.

       Le  paramètre  addr sert à deux choses. Tout d'abord, il identifie la projection des pages
       que l'on souhaite réorganiser. Ainsi, addr doit être une adresse tombant dans  une  région
       précédemment  projetée par un appel à mmap(2). Ensuite, addr spécifie l'adresse à laquelle
       les pages du fichier identifiées par pgoff et size seront placées.

       Les valeurs spécifiées dans addr et size doivent être des multiples de la taille  de  page
       système.  Si  elles  ne  le  sont  pas,  le  noyau arrondit par défaut les deux valeurs au
       multiple de taille de page le plus proche.

       Le paramètre prot doit être spécifié à 0.

       Le paramètre flags a la même signification que  pour  mmap(2),  mais  tous  les  attributs
       autres que MAP_NONBLOCK sont ignorés.

VALEUR RENVOYÉE

       S'il  réussit,  remap_file_pages()  renvoie  0.  S'il  échoue, -1 est renvoyé et errno est
       positionné pour indiquer l'erreur.

ERREURS

       EINVAL addr  ne  fait  pas  référence  à  une  projection  valide  créée  avec  l'attribut
              MAP_SHARED.

       EINVAL addr, size, prot ou pgoff n'est pas valable.

STANDARDS

       Linux.

HISTORIQUE

       Linux 2.5.46, glibc 2.3.3.

NOTES

       Depuis  Linux 2.6.23, remap_file_pages() ne crée des projections non linéaires que sur les
       systèmes de fichiers en mémoire comme tmpfs(5), hugetlbfs ou ramfs. Sur  les  systèmes  de
       fichiers  avec cache, remap_file_pages() n’est pas beaucoup plus efficace que mmap(2) pour
       ajuster les parties du fichier associées à leur adresse.

VOIR AUSSI

       getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.