博士
最后登录1970-1-1
在线时间 小时
注册时间2015-10-31
|
pid = fork();
if(pid == 0){
sleep(2);
shm_addr = shmat(shmID, 0, 0);
printf("child, shm_addr = 0x%p\n",shm_addr);
if(shm_addr == (void*)-1){
printf("child, shmat failed \n");
exit(1);
}
printf("child cat shm addr:");
printf(shm_addr);
}else if(pid > 0){
shm_addr = shmat(shmID, NULL, 0);
printf("father, shm_addr = 0x%p\n",shm_addr);
if(shm_addr == (void*)-1){
printf("father, shmat failed \n");
exit(1);
}
sprintf(shm_addr, "hello world\n");
}
执行上述代码发现:父进程和子进程得到相同的共享内存地址,也就是说,两个不同进程调用shmat函数得到的是内存的物理地址。
那么请问大神: 进程不是应该操作的都是虚拟地址吗?怎么会变成物理地址了?
|
|