• c 共享内存demo


    一个进程写数据,一个进程读数据

    写进程:

    1. shmget()获取共享内存

    2. shmat()共享内存映射到进程空间

    3. 写数据

    读进程:

    1. shmget()获取共享内存

    2. shmat()共享内存映射到进程空间

    3. 读数据

    4. shmdt()共享内存从进程空间解除映射

    5. shmctl()删除共享内存
    读进程

    //
    // Created by gxf on 2020/2/10.
    //
    
    #ifndef UNTITLED_MAIN_H
    #define UNTITLED_MAIN_H
    
    char *ftokFilePath = "/Users/gxf/CLionProjects/untitled/main.c";
    int project_id = 10;
    
    typedef struct {
        int age;
        char name[50];
    }person;
    
    #endif //UNTITLED_MAIN_H
    
    #include <stdio.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <string.h>
    
    #include "main.h"
    
    
    int main() {
        key_t ftokRes = ftok(ftokFilePath, project_id);
        person *zhangsan;
        person lisi = {10, "lisi"};
    
        int shmid = shmget(ftokRes, sizeof(person), IPC_CREAT | 0777);
        printf("shamid :%d
    ", shmid);
        zhangsan = (person *)shmat(shmid, NULL, SHM_W);
        zhangsan->age = 20;
        strcpy(zhangsan->name, "zhangsan1111");
    
    
        return 0;
    }
    
    //
    // Created by gxf on 2020/2/10.
    //
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <string.h>
    
    #include  "main.h"
    
    int main() {
        key_t ftokRes = ftok(ftokFilePath, project_id);
        printf("%d
    ", ftokRes);
        person *zhangsan = malloc(sizeof(person));
        int shmid = shmget(ftokRes, sizeof(person), IPC_CREAT);
        person *shmaddr = shmat(shmid, NULL, SHM_R);
        memcpy(zhangsan, shmaddr, sizeof(person));
        printf("age:%d, name:%s
    ", zhangsan->age, zhangsan->name);
        int res = shmdt(shmaddr);
        if (res)
            fprintf(stderr, "shmdt fail");
        res = shmctl(shmid, IPC_RMID, NULL);
        if (res)
            fprintf(stderr, "rm ipcs -m fail");
    
    
        return 0;
    }
    

      

      

     

  • 相关阅读:
    Delphi 多线程知识
    程序员最后归宿是什么?30或35想转行?
    做技术的最终出路!
    路在何方?分析程序员人生之路
    一个垂直滚动的插件
    jQuery 动画中 缓动效果的应用
    [转]jQuery性能优化指南 I
    jQuery 标记当前函数 开始写一个简单的插件
    我发现我写的这俩函数太好用了~~
    jQuery浏览器版本判断
  • 原文地址:https://www.cnblogs.com/luckygxf/p/12291505.html
Copyright © 2020-2023  润新知