码迷,mamicode.com
首页 > 其他好文 > 详细

c 共享内存demo

时间:2020-02-10 18:11:57      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:get   pat   typedef   tle   memcpy   CLion   led   str   %s   

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

写进程:

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\n", 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\n", 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\n", 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;
}

  

  

 

c 共享内存demo

标签:get   pat   typedef   tle   memcpy   CLion   led   str   %s   

原文地址:https://www.cnblogs.com/luckygxf/p/12291505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!