错误比较不明显,最要的错误是int shmid=shmget(key,4,IPC_CREAT|IPC_EXCL|0660);这一行之中的标志位IPC_EXCL确保创建新的唯一的共享内存,如果已经存在(也就是说之前使用了一次),他将返回错误,故将这个标志位去掉,其他的不是很严重,忽略的是没有最后删除共享内存,而只是分离了共享内存。修改代码如下:
#include
#include
#include
#include
#include
int main()
{
key_t key=ftok(".",100);
if(key==-1){
perror("ftok");
return -1;
}
int shmid=shmget(key,0,0);
if(shmid==-1)
{
perror("shmget");
exit(-1);
}
void*p=shmat(shmid,0,0);
if(p==(void*)-1)
{perror("shmat");
exit(-1);
}
int *pi=p;
printf("*pi=%d\n",*pi);
shmdt(p);
}
#include
#include
#include
#include
#include
int main()
{
key_t key=ftok(".",100);
if(key==-1){
perror("ftok");
return -1;
}
int shmid=shmget(key,4,IPC_CREAT|0660);
if(shmid==-1)
{
perror("shmget");
exit(-1);
}
void*p=shmat(shmid,0,0);
if(p==(void*)-1)
{ perror("shmat");
exit(-1);
}
int *pi=p;
*pi=100;
shmdt(p);
}
我用你的代码是可以读出100的,另外,(void*)-1是想表达什么?NULL?
程序2运行完,即退出了
参考别人的分析
http://blog.csdn.net/ruizeng88/article/details/6702346