Man Linux: Main Page and Category List


       remap_file_pages - create a nonlinear file mapping


       #define _GNU_SOURCE
       #include <sys/mman.h>

       int remap_file_pages(void *addr, size_t size, int prot,
                            ssize_t pgoff, int flags);


       The  remap_file_pages()  system  call  is  used  to  create a nonlinear
       mapping, that is, a mapping in which the pages of the file  are  mapped
       into   a  nonsequential  order  in  memory.   The  advantage  of  using
       remap_file_pages() over using repeated calls to  mmap(2)  is  that  the
       former  approach  does  not require the kernel to create additional VMA
       (Virtual Memory Area) data structures.

       To create a nonlinear mapping we perform the following steps:

       1. Use mmap(2) to create a mapping (which is initially  linear).   This
          mapping must be created with the MAP_SHARED flag.

       2. Use  one  or  more  calls  to  remap_file_pages()  to  rearrange the
          correspondence between the pages of the mapping and the pages of the
          file.   It  is possible to map the same page of a file into multiple
          locations within the mapped region.

       The pgoff and size arguments specify the region of the file that is  to
       be relocated within the mapping: pgoff is a file offset in units of the
       system page size; size is the length of the region in bytes.

       The addr argument  serves  two  purposes.   First,  it  identifies  the
       mapping  whose  pages  we  want  to  rearrange.   Thus, addr must be an
       address that falls within a region  previously  mapped  by  a  call  to
       mmap(2).   Second,  addr  specifies the address at which the file pages
       identified by pgoff and size will be placed.

       The values specified in addr and size should be multiples of the system
       page size.  If they are not, then the kernel rounds both values down to
       the nearest multiple of the page size.

       The prot argument must be specified as 0.

       The flags argument has the same meaning as for mmap(2), but  all  flags
       other than MAP_NONBLOCK are ignored.


       On  success,  remap_file_pages()  returns 0.  On error, -1 is returned,
       and errno is set appropriately.


       EINVAL addr does  not  refer  to  a  valid  mapping  created  with  the
              MAP_SHARED flag.

       EINVAL addr, size, prot, or pgoff is invalid.


       The  remap_file_pages()  system  call  appeared  in Linux 2.5.46; glibc
       support was added in version 2.3.3.


       The remap_file_pages() system call is Linux-specific.


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


       This  page  is  part of release 3.24 of the Linux man-pages project.  A
       description of the project, and information about reporting  bugs,  can
       be found at