以下源代码在/ 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并读取内容,这就是为什么我想知道共享内存的物理地址。