求解答啊!!!

hb_654321 2012-03-26 11:53:01
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <stdlib.h>
#define NAME "/tmp/lhb/myshm"

int main(int argc,char *argv[])

{
int shmid;
key_t key;
char *w_addr;

key = ftok(NAME,'a');
if(key == -1)
{
printf("key erro\n");
}
printf("key = %d\n",key);

if(argc != 2)
{
printf("argv erro\n");
}
shmid = shmget(key,1024,O_RDWR);
printf("shmid = %d\n",shmid);
if(shmid == -1)
{
printf("shmget erro\n");
exit(-1);
}

w_addr = shmat(shmid,0,0);
memset(w_addr,0,sizeof(w_addr));
write(w_addr,argv[1],1024);
exit(0);

}


这是创建一个write的共享内存,为什么shmget的返回值会是 -1 ???难道是哪里出错了??? gcc编译又不会报错啊。。。
...全文
40 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-03-27
  • 打赏
  • 举报
回复
shmid = shmget(key, 1024, IPC_CREAT | IPC_EXCL | 0666);
sundayX 2012-03-27
  • 打赏
  • 举报
回复
shmid = shmget(key,1024,O_RDWR|IPC_CREAT|IPC_EXCL);
justkk 2012-03-27
  • 打赏
  • 举报
回复
共享内存是否已经存在?
不存在需要使用 IPC_CREAT 创建

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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