- 论坛徽章:
- 0
|
我在redhat linux下做了一个程序,使用了共享内存ipc,在shmat()函数中发现在不同进程里面对于同样的key的返回的共享内存地址不一样。(为什么会不一样呢,难道返回的都是各进程的空间地址?)
例如:
对于进程A,获得的共享内存地址pABuf为0xeeeeee,pABuf应该为进程A的空间地址
对于进程B获得的共享内存地址pBBuf为0xccccccc,pBBuf应该为进程B的空间地址
对于某一个结构
struct ladeng
{
int a;
int b;
void* p;
void** pp;
}
假如用ladeng结构去初始化pABuf,其中p和pp都是指向pABuf中的某个位置。
然后再用ladeng结构从B进程获取的pBBuf获得共享内存内容,因为key相同的。利用(ladeng*)pBBuf获得的内容应该和(ladeng*)pABuf一样。
这样获得内容应该只有整数等非指针类型是一样的,但是指针的也是一样。
问题就是出现在这里,
对于指针指向的地址是应该是不一样,因为假设pABuf和pBBuf是各自进程空间地址,它们必须要还要把指针映射到自己的进程地址,否则那些地址对于其他进程来说是不可以访问的(我测试过程中也发现了)
我想知道为什么不同进程用相同的key使用shmat会返回不同地址,既然可以返回不同地址,为什么指针不能映射到自己进程空间。 |
|