当前位置: 技术问答>linux和unix
linux 共享内存问题
来源: 互联网 发布时间:2016-02-21
本文导语: 假设共享内存存放下面的数据结构 struct temp { char *p; char ch; }; p=&ch; ch=a A进程申请的共享内存 地址 数据 0x00af5680 (p)0x00af5684 0x00af5684 (ch)’a’ AB 都在unix使用 shmat(shmid, 0, 0) 则B: 地址 数据 0x00af5680 (p)0x00af5684 0x0...
假设共享内存存放下面的数据结构
struct temp
{
char *p;
char ch;
};
p=&ch;
ch=a
A进程申请的共享内存
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
AB 都在unix使用 shmat(shmid, 0, 0)
则B:
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
AB都在linux 使用 shmat(shmid, 0, 0)
则B:
地址 数据
0x0eaf2340 (p)0x00af5684
0x0eaf2344 (ch)’a’
因此如果使用 p就会发生段错误
AB都在linux 使用 shmat(shmid, addr, SHM_REMAP)
Addr为a的首地址
则B:
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
但是 会在执行shmat语句是dump掉
错误为 段错误
struct temp
{
char *p;
char ch;
};
p=&ch;
ch=a
A进程申请的共享内存
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
AB 都在unix使用 shmat(shmid, 0, 0)
则B:
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
AB都在linux 使用 shmat(shmid, 0, 0)
则B:
地址 数据
0x0eaf2340 (p)0x00af5684
0x0eaf2344 (ch)’a’
因此如果使用 p就会发生段错误
AB都在linux 使用 shmat(shmid, addr, SHM_REMAP)
Addr为a的首地址
则B:
地址 数据
0x00af5680 (p)0x00af5684
0x00af5684 (ch)’a’
但是 会在执行shmat语句是dump掉
错误为 段错误
|
结构里不要用 char * 这种指针类型, 要用,你有用个数组。