我试图写入共享内存,但由于某种原因,在我调用 shmat() 和 strcpy 之后,我得到了分段错误(核心转储),这是为什么?
这是我的代码:
int fd,shmid;
key_t shmkey;
char *shm_add;
pid_t pid,pid1=0,pid2=0;
shmkey=ftok("shmdemo.c",'j');
if ( shmkey == (key_t)-1 )
{
printf("main: ftok() for shm failed\n");
return -1;
}
shmid=shmget(shmkey, 50, 0666 | IPC_CREAT | IPC_EXCL);
if (shmid == -1)
{
printf("main: shmget() failed\n");
return -1;
}
shm_add=(char *)shmat(shmid,0,0);
if ( shm_add==NULL )
{
printf("main: shmat() failed\n");
return -1;
}
strcpy(shm_add,"hello");
编辑:我在目录上有文件名 shmdemo.c,并且 shmget 的 errno 说“文件存在”但是当我从目录中删除“shmdemo.c”时,新的 errno 出现在 ftok 中,说“没有这样的文件或目录”。
谢谢你,阿萨夫。