mem_offset64_peer()

Получить информацию о смаппированном блоке памяти другого процесса

Прототип:

#include <sys/mman.h>
int mem_offset64_peer( pid_t pid,
const void *addr,
size_t length,
off64_t *offset,
size_t *contig_len );

Аргументы:

pid
Идентификатор процесса, чьему адресному пространству соответствует адрес addr. В качестве pid может быть задан 0, что соответствует текущему процессу.
addr
Виртуальный адрес блока памяти, информацию о котором необходимо получить.
length
Длина адресуемого параметром addr блока памяти в байтах.
offset
Указатель на переменную для хранения считанного физического адреса.
contig_len
Указатель на переменную для хранения либо значения length, либо длины наибольшего непрерывного блока памяти, который в настоящий момент смапирован в процессе pid по адресу addr. Возвращается наименьшая из этих величин.

Библиотека:

libc

Описание:

Функция mem_offset64_peer() устанавливают переменной, которая адресуерся указателем offset, значение физического адреса смапированного блока памяти, имеющего в процессе pid виртуальный адрес addr.


Note: Из соображений повышения производительности не рекомендуется повторный вызов mem_offset64_peer() для идентичного набора параметров. Предпочтительным считается независимое кэширование считанных характеристик блока типизированной памяти.

Значение offset соответствует смещению адреса addr относительно начала файла /dev/mem (что является физическим адресом блока памяти).

Если объект fd не является типизированным объектом памяти или не соответствует NOFD вызов завершится с ошибкой.


Note: Функция mem_offset64_peer() (примечание: эти утверждения не проверялись): Вызывает инициализационное копирование или зануление MAP_PRIVATE или MAP_ANON страниц. Возвращает -1 (EACCES) для MAP_LAZY страниц, память для которых еще не была физически выделена.

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

0
Успешное завершение.
-1
Функция завершилась с ошибкой (устанавлено знаение errno).

Коды ошибок:

EACCES
Процесс не имеет смапированных страниц по адресу addr.
ESRCH
Процесс pid не существует.
ENOSYS
Функция mem_offset64_peer() не поддерживается.

Примеры:

off64_t offset;
if ( mem_offset64_peer( 0, addr, -1, &offset, 0 ) == -1 )
{
/* Error */
} else {
/* offset contains the physical address of the memory mapped at addr. */
}

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

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

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

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

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

mmap(), mem_offset(), mem_offset64(), posix_mem_offset(), posix_mem_offset64()




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