mmap64_peer()

Мапировать область памяти в адресное пространство другого процесса

Прототип:

#include <sys/mman.h>
void * mmap64_peer( pid_t pid,
void *addr,
size_t len,
int prot,
int flags,
int fildes,
off64_t off );

Аргументы:

pid
Идентификатор процесса, чьему адресному пространству соответствует адрес addr. В качестве pid может быть задан 0, что соответствует текущему процессу.
addr
NULL или указатель на виртуальный адрес, по которому должна быть смапирована память в вызывающем процессе.
len
0 или количество байт данных, подлежащих мапированию.
prot
Запрашиваемые при мапировании разрешения для области памяти. Следующие биты могут быть скомбинированы, определенные в <sys/mman.h>:
flags
Флаги, определяющие дополнительную информацию для обработки области памяти. POSIX определяет следующие флаги: Следующие флаги являются расширениями Unix или ЗОСРВ «Нейтрино»: Более подробная информация представлена на странице функции mmap().
fildes
Файловый дескриптор, указывающий на файл, объект разделяемой памяти или объект типизированной памяти. Если мапируется анонимная или физическая память, аргумент должен принимать значение NOFD.
off
Смещение в файле или объекте памяти на начало мапируемой области памяти или физический адрес (например, при мапировании регистров устройства при разработке менеджера ресурсов).

Note: Если требуется мапирование физической памяти устройства, используйте функцию mmap_device_memory() вместо mmap().

Для архитектуры x86 если регистры устройства доступны в виде ресурсов памяти может использоваться функция mmap_device_memory(). В противном случае должна применяться функция mmap_device_io() для предоставления доступа к устройству, а также функции in8() и out8() для считывания и изменения значений регистров. В других архитектурах обе функции эквивалентны.

Библиотека:

libc

Описание:

Функция mmap64_peer() используется для манипулирования адресным пространством других процессов. Назначение и особенности использования полностью соответствуют функции mmap64().

Возвращаемое значение:

Виртуальный адрес смапированного объекта или MAP_FAILED в случае ошибки (при этом устанавливается errno).

Коды ошибок:

EACCES
Файловый дескриптор fildes не был открыт для чтения, либо были указаны PROT_WRITE и MAP_SHARED для файлового дескриптора fildes не доступного для записи.
EAGAIN
Мапирование не может заблокировано в памяти из-за нехватки ресурсов, если это определено в mlockall().
EBADF
Файловый дескриптор fildes недоступен.
EBUSY
Ресурс, который Вы пытаетесь смапировать недоступен.
EINVAL
Некорректно задана маска flags, len равно 0 или для флага MAP_FIXED задан некорректный addr.
EMFILE
Число мапируемых областей памяти достигло максимума; см. RLIMIT_AS и RLIMIT_DATA параметры для setrlimit().
ENODEV
Аргумент fildes указывает на объект, для которого выполнение mmap() бессмысленно (например, на терминал).
ENOMEM
Выполнено одно из следующих условий:
ENXIO
Выполнено одно из следующих условий:
EOVERFLOW
При доступе к регулярному файлу смещение и длина мапируемой области памяти выходят за его границы.

Классификация:

ЗОСРВ «Нейтрино»

Поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2020

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

mmap(), mmap64(), munmap(), munmap_peer(), munmap_flags(), munmap_flags_peer()

Разделяемая память




Предыдущий раздел: Описание API системной библиотеки