文件名 testwrite.c
/***** testwrite.c *******/
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
} people;
int main(int argc, char** argv)
{
int shm_id,i;
key_t key;
char temp;
people *p_map;
char* name = "/home/sy";
key = ftok(name,0);
if(key==-1)
perror("ftok error");
shm_id=shmget(key,sizeof(people)*10,IPC_CREAT );
if(shm_id==-1)
{
perror("shmget error");
return -1;
}
p_map=(people*)shmat(shm_id,NULL,0);
temp='a';
for(i = 0;i<1;i++)
{
temp+=1;
memcpy((*(p_map+i)).name,&temp,1); //1)執行的時候coredump出現,
(*(p_map+i)).age=20+i; //1)執行的時候coredump出現,
}
if(shmdt(p_map)==-1)
perror(" detach error ");
return 0;
}
我的系統是HP-UX zx6000 B.11.23。
經過調查發現問題是ftok的時候指定的文件名的路徑沒有權限,如果指定爲 char* name = "/tmp/sy"; 就執行OK。
(修正前: char* name = "/home/sy"; )
具體原因不明白。