Получить смещение и длину отображенного блока памяти
#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 );
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
) не открывает дескриптор файла.
posix_mem_offset() — POSIX 1003.1 Typed Memory Objects; posix_mem_offset64() — Поддержка больших файлов
mmap(), posix_typed_mem_get_info(), posix_typed_mem_open()
Предыдущий раздел: Описание API системной библиотеки