首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux 停申请system v共享内存区存放结构体等复杂数据

2013-07-04 
linux 下申请system v共享内存区存放结构体等复杂数据对system v共享内存区的使用有几点疑问,想请高手解决

linux 下申请system v共享内存区存放结构体等复杂数据
对system v共享内存区的使用有几点疑问,想请高手解决下:
    我申请了多倍于结构体大小的共享内存空间,然后往里面存放结构体信息,不知这样做会不会引起内存溢出的问题,或者有什么不妥?代码如下:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/shm.h>
#include <errno.h>

extern int errno;

typedef struct struTest{
char lstr1[64];
int ii;
char lstr2[126];
}Test, *PTest;

int main(int c, char** v)
{
PTest pt;
int myshmid1 = shmget(0x1234, 3*sizeof(Test), IPC_CREAT|0660);
if(myshmid1==-1)
{
printf("shm1 get err %d\n", errno);
return 0;
}
printf("size test:%d\n", sizeof(Test));

pt = (PTest)shmat(myshmid1, NULL, 0);
for(int i=0;i<3;i++)
{
memset(pt+i, 0, sizeof(Test));
strcpy((pt+i)->lstr1, "aabbcc");
(pt+i)->ii = i+1;
}

int* pishm;
int myshmid2 = shmget(0x1235, sizeof(int), IPC_CREAT|0660);
pishm = (int*)shmat(myshmid2, NULL, 0);

printf("begin test...\n");
for(int i=0;i<3;i++)
{
printf("ptest%d-lstr1:%s, ii:%d\n", i, (pt+i)->lstr1, (pt+i)->ii);
}

int res = shmdt(pt);
printf("dt pt res:%d, errno:%d\n", res, errno);
res = shmdt(pishm);
printf("dt int res:%d, errno:%d\n", res, errno);
printf("end test...\n");
return 0;
}

程序运行的结果是正确的,这是不是就说明这样做是可以的,另外为共享内存区分配的空间是连续的吗? Linux shm system?v
[解决办法]
可以的, 注意结构体内的指针概念换成字节偏移量就可以, 这里没有指针的问题,

热点排行