发布网友 发布时间:2022-04-24 16:30
共3个回答
热心网友 时间:2022-04-14 16:47
错误比较不明显,最要的错误是int shmid=shmget(key,4,IPC_CREAT|IPC_EXCL|0660);这一行之中的标志位IPC_EXCL确保创建新的唯一的共享内存,如果已经存在(也就是说之前使用了一次),他将返回错误,故将这个标志位去掉,其他的不是很严重,忽略的是没有最后删除共享内存,而只是分离了共享内存。修改代码如下:
#include <stdio.h>#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
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);
}
热心网友 时间:2022-04-14 18:05
我用你的代码是可以读出100的,另外,(void*)-1是想表达什么?NULL?
热心网友 时间:2022-04-14 19:40
程序2运行完,即退出了
参考别人的分析
http://blog.csdn.net/ruizeng88/article/details/6702346