关于共享存储
本帖最后由 dick_yh 于 2011-06-06 22:20 编辑
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<sys/stat.h>
#include<sys/shm.h>
#define KEY 123
#define SHM_MODE 0600
int main(int argc, char *argv[]){
int shmid, pid;
void *shmptr;
int i = 0;
char buff[100];
if((shmptr = malloc(sizeof(int)+sizeof(buff))) == NULL){
printf("malloc error\n");
}
if((shmid = shmget(IPC_PRIVATE, sizeof(int)+sizeof(buff), SHM_MODE)) < 0){
printf("shmget error\n");
return -1;
}
if((shmptr = shmat(shmid, NULL, 0)) == (void *)-1){
printf("shmat error\n");
return -1;
}
if((pid = fork()) < 0){
printf("fork error\n");
return -1;
}else if(pid > 0){
printf("father\n");
printf("father : ddd [%d]\n", shmptr);
*(int *)shmptr += 10;
printf("father : [%d]\n", *(int *)shmptr);
sprintf(buff, "%s", "father");
strcpy(++shmptr,buff);
printf("father : [%s]\n", (char *)shmptr);
printf("father end\n");
}else{
printf("child\n");
sleep(1);
printf("child : ddd [%d]\n", shmptr);
printf("child : [%d]\n", *(int *)shmptr);
printf("child : [%s]\n", (char *)++shmptr);
printf("child end\n");
}
sleep(3);
if(shmctl(shmid, IPC_RMID, 0) < 0){
printf("shmctl error\n");
}
return 0;
}
我想知道 为什么我让int 自加了 没有获取到 或者是 没有存进去? 求高手解释。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
shmget()是在各个进程里自己调用,否则shmptr在父子进程中不是都指向共享内存
我自己的解决方法是 封装成结构体 能够实现...