共享内存获取老是失败,是不是起始地址设置有问题,我定义的是0x30005000

举报
大友作为 发表于 2019/07/30 14:21:41 2019/07/30
【摘要】 static void* GetSharedMem(U32 u32MemKey ,U32 u32DataSize ,U32 u32Create){ S32 s32ShmID ; //共享内存ID S32 s32SemID ; //共享内存对应信号量 void *pReturn = NULL ; //增加信号量空间 u32DataSize += sizeof(MEM_SEM); pr...

static void* GetSharedMem(U32 u32MemKey ,U32 u32DataSize ,U32 u32Create)

{

 S32 s32ShmID ;   //共享内存ID

 S32 s32SemID ;   //共享内存对应信号量

 void *pReturn = NULL ;


 //增加信号量空间

 u32DataSize += sizeof(MEM_SEM);

 

 printf("GetSharedMem  111111 \r\n ");


 //创建共享内存(或读取ID)

 s32ShmID = shmget((key_t)u32MemKey ,(size_t)u32DataSize ,0600|IPC_CREAT);

 printf("GetSharedMem  s32ShmID=%d \r\n ",s32ShmID);

 if (-1==s32ShmID)

 {

 perror("shmget:\n") ;

  exit(EXIT_FAILURE) ;  //创建或获取失败,退出进程

 }

 printf("GetSharedMem  AAAAAA \r\n ");


 //共享内存挂接

 pReturn = shmat(s32ShmID ,NULL ,0) ;

 if (NULL==pReturn)

 {

  exit(EXIT_FAILURE) ;  //内存挂接失败,退出进程

 }

 printf("GetSharedMem  22222 \r\n ");


 //创建信号量

 s32SemID = semget((key_t)u32MemKey ,1 ,0666|IPC_CREAT) ;

 if (-1==s32ShmID)

 {

  exit(EXIT_FAILURE) ; //创建信号量失败,退出进程

 }

 printf("GetSharedMem  33333 \r\n ");


 //判断是否为创建,若创建则对数据初始化

 if (TRUE==u32Create)

 {

  //数据清0

  memset(pReturn ,0 ,sizeof(u32DataSize));

  

  //在结构数据中的保存共享内存ID及信号量ID

  ((MEM_SEM*)pReturn)->s32ShmID = s32ShmID;

  ((MEM_SEM*)pReturn)->s32SemID = s32SemID;


  //共享内存第一创建时默认加锁

  //解锁

  UnlockSem(s32SemID);

 }

 printf("GetSharedMem  44444 \r\n ");


 return pReturn;

}


返回信息 GetSharedMem  s32ShmID=-1                                                      

shmget:                                                                         

: Invalid argument  


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。