共享内存获取老是失败,是不是起始地址设置有问题,我定义的是0x30005000
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
- 点赞
- 收藏
- 关注作者
评论(0)