Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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.

СТАНДАРТЫ

       Linux.

ИСТОРИЯ

       Linux 2.5.46, glibc 2.3.3.

ПРИМЕЧАНИЯ

       Начиная с 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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                              remap_file_pages(2)