共享内存的简单使用

#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");

}
posted @ 2021-05-10 14:49  dongxiaoming  阅读(343)  评论(0)    收藏  举报