Я хотел бы определить, была ли определенная страница уже отображена в памяти.Цель здесь - выполнить эту проверку перед вызовом mmap с фиксированным адресом памяти.Следующий код иллюстрирует, что происходит в этом случае по умолчанию: mmap автоматически перераспределяет исходные страницы памяти.
#include <sys/mman.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int page_size;
void *ptr;
page_size = getpagesize();
ptr = mmap(0, 10 * page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
if (ptr == MAP_FAILED) {
printf ("map1 failed\n");
return 1;
}
((int *)ptr)[0] = 0xdeadbeaf;
ptr = mmap(ptr, 2 * page_size, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0);
if (ptr == MAP_FAILED) {
printf ("map2 failed\n");
return 1;
}
if (((int *)ptr)[0] != 0xdeadbeaf) {
printf ("oops, data gone !\n");
}
return 0;
}
Я понимаю, что могу открыть и проанализировать / proc / self / maps, чтобы выяснить, какой диапазон памяти имеетбыли выделены и выведены из этого, если я могу безопасно запросить определенный диапазон памяти с mmap, но я ищу правильный API: есть ли такая вещь?