共享内存的简单使用
#define shm_id 0x80
#define shm_size 2048
#define shmMax 1024
typedef struct _tag_sysInfo
{
void a[shmMax];//该数据可定义为自己需要的类型
}_ts_sysInfo;
void shmem_init(void)
{
char * p_sysinfo = NULL;
int shmid;//共享内存标识符
//创建共享内存
shmid = shmget(shm_id ,shm_size,SHM_W|SHM_R|IPC_EXCL);
if(shmid == -1)
{
printf("shmem no creat! to creating now\n");
shmid = shmget(shm_id ,shm_size,SHM_W|SHM_R|IPC_CREAT|IPC_EXCL);
if(shmid == -1)
{
perror("create share memory");
exit(0);
}
}
// 将共享内存连接到当前进程的地址空间
p_sysinfo = shmat(shmid,0,0);
if(p_sysinfo == (void*)-1)
{
perror("get share memory");
exit(0);
}
sysinfo =(_ts_sysInfo*) p_sysinfo;//设置共享内存,p_sysinfo需要转换一下
//分离一块内存
// shmdt(p_sysinfo);
//shmctl(shmid, IPC_RMID, NULL); //删除共享内存
//printf("shmem init ok\n");
}

浙公网安备 33010602011771号