当前位置: 技术问答>linux和unix
结构体数组映射到共享内存区的问题
来源: 互联网 发布时间:2015-10-05
本文导语: 结构体数组变量: struct student{ int number; char name[10]; char addr[256]; }studentArray[6][10][50]; 是个全局变量,父子进程都要调用,并且要共享。 于是用mmap映射: struct student *ptr = mmap(NULL, sizeof(studentArray), PROT_READ | P...
结构体数组变量:
struct student{
int number;
char name[10];
char addr[256];
}studentArray[6][10][50];
是个全局变量,父子进程都要调用,并且要共享。
于是用mmap映射:
struct student *ptr = mmap(NULL, sizeof(studentArray), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
这时返回的ptr指针是可以操作共享内存,但是就不能通过数组结构的下标进行访问了。
由于数组下标表示有意义,所以很不方便,甚至有些数据操作完成不了。
请问,有什么办法可以解决吗?
struct student{
int number;
char name[10];
char addr[256];
}studentArray[6][10][50];
是个全局变量,父子进程都要调用,并且要共享。
于是用mmap映射:
struct student *ptr = mmap(NULL, sizeof(studentArray), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
这时返回的ptr指针是可以操作共享内存,但是就不能通过数组结构的下标进行访问了。
由于数组下标表示有意义,所以很不方便,甚至有些数据操作完成不了。
请问,有什么办法可以解决吗?
|
三级数组。你可以这样用
struct student (*p)[10][50] = ptr;
p可以用三级下标,也可以转换一下就用ptr的一维下标。
赋值可以加个强制转换
(struct student*)p = ptr;
struct student (*p)[10][50] = ptr;
p可以用三级下标,也可以转换一下就用ptr的一维下标。
赋值可以加个强制转换
(struct student*)p = ptr;