zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

      

     

  • 相关阅读:
    脏读 幻读 不可重复读
    按位与、或、异或等运算方法
    java适配器模式
    servlet/filter/listener/interceptor区别与联系
    Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
    Struts2的优点与Struts1的区别:
    ITOO 第一个任务,新建界面
    导出word使用模版
    【Web前端】---js调用本地应用程序
    JQuery经典小例子——可编辑的表格
  • 原文地址:https://www.cnblogs.com/luckygxf/p/12291505.html
Copyright © 2011-2022 走看看