共享内存,shmat函数出错!

csdongxin 2013-12-06 04:44:59

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
#include<stdlib.h>

#define BUF_SIZE 1024
#define MYKEY 24

int main(){
int shmid;
char *shmptr;
if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT) == -1){
printf("shmget error!\n");
exit(1);
}
if((shmptr=shmat(shmid, 0, 0)) == (void*)-1){
printf("shmat error!\n");
exit(1);
}
while(1){
printf("strinig in the share memory is: %s\n", shmptr);
sleep(10);
}
return 0;
}


在令一个程序中,用的是shmid=shmget(IPC_PRIVATE,SHM_SIZE,SHM_R|SHM_W)
这样得到的共享内存可以正常使用shmat函数,不会出错.
而使用上述代码中的shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)指定key方式得到的共享内存使用shmat函数附加到进程地址空间时就会出错!
是不是和shmget有关?
如果不是这个原因,该是什么原因?怎么解决?
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-12-06
  • 打赏
  • 举报
回复
然后把错误信息打印出来看看! 应该不是get的问题吧!一楼说的也有道理! 应该试试把你的 MYKEY增大一点!后面加几个零,试试!
xml111 2013-12-06
  • 打赏
  • 举报
回复
MYKEY标识的共享内存是不是系统使用的? lz换个大点的数字试试

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧