posix_mem_offset(), posix_mem_offset64()

Получить смещение и длину отображенного блока памяти

Прототип:

#include <sys/mman.h>
int posix_mem_offset( const void *restrict addr,
size_t len,
off_t *restrict off,
size_t *restrict contig_len,
int *restrict fildes );
int posix_mem_offset64( const void *restrict addr,
size_t len,
off64_t *restrict off,
size_t *restrict contig_len,
int *restrict fildes );

Аргументы:

addr
Адрес, по которому доступен блок памяти.
len
Длина блока объекта памяти, для которого требуется получить смещение.
off
Указатель на место, где функция может сохранять смещение (или местоположение) в блоке памяти.
contig_len
Указатель на место, где функция может хранить либо значение len, либо длину наибольшого непрерывного блока типизированной памяти, который в настоящее время отображен для вызывающего процесса, начиная с addr, в зависимости от того, что меньше.
fildes
Указатель на место, где функция может хранить дескриптор файла для объекта типизированной памяти.

Библиотека:

libc

Описание:

Функция posix_mem_offset() устанавливает значение off равным смещению (или местоположению) в типизированном объекте памяти блока памяти, отображаемого в данный момент по адресу addr.

Функция posix_mem_offset() использует переменную для возврата дескриптора, который устанавливает отображение, содержащее addr. На эту переменную указывает fildes; его значение равно -1, когда дескриптор закрывается после установления отображения.

Аргумент len - это длина блока памяти, для которого требуется смещение. По возвращению значение, на которое указывает contig_len, равно либо len, либо длине наибольшого непрерывного блока типизированной памяти, который в настоящее время отображен для вызывающего процесса, начиная с addr, в зависимости от того, что меньше.

Если значения off и contig_len, полученные в результате вызова posix_mem_offset(), используются в вызове mmap() с файловым дескриптором, который ссылается на тот же участок памяти, что и fildes (либо через тот же порт или через другой порт), то отображаемая типизированная область памяти является точно такой же областью, которая была отображена по переменной адреса addr процесса, вызвавшего posix_mem_offset(). Также следует иметь в виду, что ни один из двух флагов (например, POSIX_TYPED_MEMORY_ALLOCATE или POSIX_TYPED_MEM_ALLOCATE_CONTIG) не открывает дескриптор файла.

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

0
Успешное завершение.
EACCES
Процесс не имеет доступных объектов памяти по указанному адресу addr.

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

posix_mem_offset() — POSIX 1003.1 Typed Memory Objects; posix_mem_offset64() — Поддержка больших файлов

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

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

mmap(), posix_typed_mem_get_info(), posix_typed_mem_open()




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