Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       remap_file_pages - создаёт нелинейное файловое отображение

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #define _GNU_SOURCE         /* Смотрите feature_test_macros(7) */
       #include <sys/mman.h>

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

ОПИСАНИЕ

       Замечание:  данный  системный вызов, начиная с Linux 3.16, устарел. В Linux 4.0 реализация
       была заменена на более медленную эмуляцию ядром. В приложениях, где он используется, нужно
       применять  альтернативные  вызовы. Данное изменение было сделано из-за сложности кода ядра
       этого системного вызова, и считается, что им почти никто или вообще никто  не  пользуется.
       Какое-то время он использовался в приложениях баз данных на 32-разрядных системах, но этих
       вариантов использования на 64-разрядных системах замечено не было.

       Системный вызов remap_file_pages() используется для создания нелинейного  отображения,  то
       есть  отображения,  в  котором  страницы  файла  отображаются  в память непоследовательно.
       Преимущество использования remap_file_pages() по сравнению с повторением вызовов mmap(2) в
       том,  что  первый не требует от ядра создания дополнительных структур данных VMA (областей
       виртуальной памяти).

       Для создания нелинейного отображения выполните следующее:

       1. Создайте отображение (пока линейное)  с  помощью  mmap(2).  Данное  отображение  должно
          создаваться с флагом MAP_SHARED.

       2. Выполните  переупорядочивание  соответствия  между  страницами отображения и страницами
          файла с помощью одного или нескольких вызовов remap_file_pages().  Возможно  отображать
          одну страницу файла в несколько мест отображаемой области.

       В  аргументах  pgoff  и  size  указывается  область  файла,  которая  будет  перенесёна  в
       отображение: в pgoff задаётся смещение в файле, измеряемое в размерах системных страниц; в
       size задаётся длина области в байтах.

       Аргумент  addr  предназначен  для  двух целей. Во-первых, им определяется отображение, чьи
       страницы мы хотим перенести. То есть в addr должен быть указан адрес  в  области,  которая
       была  ранее  отображена  с помощью вызова mmap(2). Во-вторых, в addr указывается адрес, по
       которому должны быть помещены файловые страницы, заданные pgoff и size.

       Значения, указанные в addr и size, должны быть кратны размеру системной страницы. Если это
       не  так,  то  ядро  округляет оба значения в меньшую сторону до ближайшего числа, кратного
       размеру страницы.

       Значение аргумента prot должно быть 0.

       Аргумент  flags  предназначен  для  того  же,  что  и  в  mmap(2),  но  все  флаги,  кроме
       MAP_NONBLOCK, игнорируются.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

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

ОШИБКИ

       EINVAL Значение  addr  не  ссылается  на  допустимое  отображение,  созданное   с   флагом
              MAP_SHARED.

       EINVAL Некорректное значение в addr, size, prot или pgoff.

ВЕРСИИ

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

СТАНДАРТЫ

       Системный вызов remap_file_pages() есть только в Linux.

ЗАМЕЧАНИЯ

       Начиная с Linux 2.6.23,  remap_file_pages()  создаёт  нелинейные  отображения  только  для
       файловых  систем  в  оперативной  памяти,  таких  как  tmpfs(5),  hugetlbfs или ramfs. Для
       файловых систем с хранилищем remap_file_pages() не намного эффективнее  чем  mmap(2),  так
       как рассчитывает адреса для частей файла.

СМ. ТАКЖЕ

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

ПЕРЕВОД

       Русский  перевод  этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Azamat
       Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova
       <blackkatelv@gmail.com>,  Lockal <lockalsash@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>,
       Баринов Владимир и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.