共享内存,信号量

本文详细介绍了Linux环境下,如何使用共享内存和信号量进行进程间的通信。首先,文章阐述了共享内存的概念及申请、使用、撤销映射的步骤,包括shmget、shmat和shmdt等关键函数的使用。接着,讨论了信号量作为同步互斥机制,讲解了信号量的申请、设置、删除和P/V操作,涉及semget、semctl和semop等函数。最后,文章通过实例展示了如何结合共享内存和信号量解决进程通信中的同步问题。
摘要由CSDN通过智能技术生成

一、进程之间的通信。--- 共享内存。
1、什么是共享内存?机制如何?
共享内存也是属于IPC对象,所以在使用之前,必须为共享内存申请key值。
共享内存由于存在于运行内存上,运行内存在linux下所有的进程都可以访问到,结论就是任意的两个进程都可以通过共享内存进行通信。
实现步骤: key值  -> ID号  -> 共享内存地址  -> 数据交换  -> 撤销映射。

2、 共享内存函数接口?
1)先申请key值。
   key = ftok(".",10);

2)根据申请到的key值去申请共享内存的ID号。  -> shmget()  -> man 2 shmget
功能: allocates a System V shared memory segment
    //允许在系统中申请一块共享内存   -> 你的住房证明

头文件:
    #include <sys/ipc.h>
        #include <sys/shm.h>

原型:
    int shmget(key_t key, size_t size, int shmflg);

参数:
    key: 共享内存的key值。
    size:共享内存的总字节数,必须是PAGE_SIZE的倍数    #define PAGE_SIZE 1024
    shmflg:IPC_CREAT|0666   -> 不存在则创建。

返回值:
    成功:共享内存的ID号
    失败:-1

3)根据共享内存ID号去运行内存上申请对应的空间。  -> shmat()  -> man 2 shmat
头文件:
    #include <sys/types.h>
        #include <sys/shm.h>

原型:
    void *shmat(int shmid, const void *shmaddr, int shmflg);

参数:
    shmid:共享内存的ID号。    
    shmaddr:NULL   -> 系统自动分配空间给你   99.99999%
        不为NULL-> 用户自己选择地址       0.0000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值