69,379
社区成员
发帖
与我相关
我的任务
分享
typedef struct
{
char a[16];
char b[16];
}Strutest;
typedef struct
{
int indx;
Strutest S8testData[1024];
}StruAlltest;
StruAlltest *gMemtest;
int s32Index,s32ID;
unsigned int u32Addr;
s32ID = shmget(s32Index,u32Size,IPC_CREAT|0777);
if(s32ID == -1)
{
perror("shmget error");
//printf("shmget error.\n");
return(NULL);
}
u32Addr = (unsigned int)shmat(s32ID,NULL,0);
gMemtest= (StruAlltest*)u32Addr;
memset(gMemtest,0,u32Size);
sprintf(c8Buf,"%sSMemGprs",SHARTMEM_PATH); //gprs
s32size = sizeof(*gMemGprsData);
printf("size %d\n",s32size);
gMemGprsData = (StruAllGprsData *)CreatShareMem(c8Buf,sizeof(StruAllGprsData));
if(gMemGprsData == NULL) return(-1);
printf("%x\n",gMemGprsData);
memset(gMemGprsData,0,s32size);
//创建共享内存
void *CreatShareMem(char *c8PName,unsigned int u32Size)
{
int s32Index,s32ID;
char *u32Addr;
//unsigned int u32Addr;
FILE *fp;
fp = fopen(c8PName,"rb"); //创建文件
if(fp == NULL)
{ fp = fopen(c8PName,"wb");
if(fp == NULL)
{ printf("Creat file %s error.\n",c8PName);
return(NULL);
}
}
fclose(fp);
s32Index = ftok(c8PName,0);
if(s32Index == -1)
{ printf("ftok error.\n");
return(NULL);
}
s32ID = shmget(s32Index,u32Size * 2,IPC_CREAT|0777);//IPC_CREAT|IPC_EXCL|0600
if(s32ID == -1)
{
perror("shmget error");
//printf("shmget error.\n");
return(NULL);
}
u32Addr = (char*)shmat(s32ID,NULL,0);
//u32Addr += 3;
//u32Addr &= 0xFFFFFFFC;
printf("Share mem %s addr=0x%X,size=%d\r\n",c8PName,u32Addr,u32Size);
return((void *)u32Addr);
}
#include <sys/shm.h>
#include <string.h>
typedef struct
{
char a[16];
char b[16];
}Strutest;
typedef struct
{
int indx;
Strutest S8testData[1024];
}StruAlltest;
int main(int argc, char **argv)
{
StruAlltest *gMemtest;
int s32Index = 0x000010221, s32ID;
// unsigned int u32Addr;
char *u32Addr;
// s32ID = shmget(s32Index,u32Size,IPC_CREAT|0777);
s32ID = shmget(s32Index, sizeof(StruAlltest) , IPC_CREAT|0777);
if(s32ID == -1)
{
perror("shmget error");
return -1;
}
u32Addr = (char*)shmat(s32ID,NULL,0);
gMemtest= (StruAlltest*)u32Addr;
memset(gMemtest,0,sizeof(StruAlltest) );
return 0;
}