我試圖寫入共享內存,但由於某種原因,我調用shmat()和strcpy後,我得到分段錯誤(核心轉儲)爲什麼?shmat返回分段錯誤(核心轉儲)
這是我的代碼:
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的的錯誤號說「文件已存在」,但是當我從刪除「shmdemo.c」目錄中,一個新的errno出現在ftok中,表示「沒有這樣的文件或目錄」。
謝謝你,阿薩夫。
'shm_add'的價值是什麼? (或者,一般來說,如果他們報告成功,請檢查所有系統調用的返回值。) – millimoose
好吧,我爲syscalls添加了返回值,問題在於shmget。爲什麼? –
那麼[通話失敗後'errno'的值是什麼](http://linux.die.net/man/3/perror)?因此,[man shmget'](http://linux.die.net/man/2/shmget)表示errno的值是什麼意思? – millimoose