共享内存实现父子进程之间通信实例

介绍

  • 使用 shm 共享内存,实现父子之间通信;
  • 父进程读,子进程写
  • 若要实现没有没有亲缘关系进程之间的通信,只需使用 ftok() 获取一个 key 值,两个进程都使用这个 key 值代替 IPC_PRIVATE ,即可实现不同进程之间的通信

代码

mmap_shm.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/shm.h>

#define MEMSIZE 1024

int main(int argc, char **argv){

    pid_t pid;
    int shmid;
    char *ptr;

    if((shmid = shmget(IPC_PRIVATE, MEMSIZE, 0644)) < 0){
        perror("shmget()");
        exit(1);
    }


    pid = fork();
    if(pid < 0){
        perror("fork()");

        shmctl(shmid, IPC_RMID, NULL);
    
        exit(1);
    }
    if(pid == 0){   // child  write
        
        ptr = shmat(shmid, NULL, 0);
        if(ptr == (void*)-1){
            perror("shmmat()");
            exit(1);
        }

        strcpy(ptr, "saika");

        shmdt(ptr);

        exit(0);

    }else{      // parent read

        wait(NULL);
        ptr = shmat(shmid, NULL, 0);
        if(ptr == (void*)-1){
            perror("shmmat()");
            exit(1);
        }

        puts(ptr);
        shmdt(ptr);

        shmctl(shmid, IPC_RMID, NULL);
        exit(0);
    }

}

运行结果

01

总结

  • 使用相同的 key 值,并规定好协议,即可实现不同进程之间的信息传递。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值