如何获取共享内存的物理地址

时间:2018-11-06 02:32:21

标签: linux shared-memory

以下源代码在/ dev / shm中创建共享内存

static char* conf;
#define STATE_FILE "/memtest.shared"

int shm_fd;
if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_EXCL | O_RDWR),
                   (S_IREAD | S_IWRITE))) > 0 ) {
    ; /* We are the first instance */
}
else if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_RDWR),
                    (S_IREAD | S_IWRITE))) < 0)
{
    printf("Could not create shm object. %s\n", strerror(errno));
    exit( 0 ) ;
}
int iTotalByte = 1024*1024*2 ;
ftruncate(shm_fd, iTotalByte );
conf =  (char *) mmap(0, iTotalByte , (PROT_READ | PROT_WRITE), MAP_SHARED, shm_fd, 0) ;
if(conf  == MAP_FAILED)
{
    printf(" mmap error ....\n")  ;
    exit( 0 ) ;
}

然后我运行应用程序以附加共享内存:

numactl -N 0 -m 0 ./testz.exe <== pid 19852

我尝试在/ proc / 19852 / maps或pmap -XX 19852中找出 /dev/shm/memtest.shared的物理地址是什么 且无法解释,我观察到每个附加有memtest.shared的应用程序都具有相同的INode,但不知道这是否是memtest.shared的物理地址,如何获取共享内存的物理地址?!

注意:

我想做的是假设共享内存的物理地址是0x700000,那么我可以使用mmap / dev / mem来访问它,偏移量0x700000并读取内容,这就是为什么我想知道共享内存的物理地址。

0 个答案:

没有答案