关于共享存储

发布于 2022-10-15 05:02:22 字数 4015 浏览 16 评论 0

本帖最后由 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云雾 2022-10-22 05:02:22

shmget()是在各个进程里自己调用,否则shmptr在父子进程中不是都指向共享内存

爱的十字路口 2022-10-22 05:02:22

我自己的解决方法是 封装成结构体 能够实现...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文