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 системной библиотеки