linux errno变量头文件_Linux进程间通信:IPC通信机制简述

bef23b7da9caa8432a63f0b71fdc99ec.png

图控大叔

构图传递思想

阅读从未如此简单!!!

01

前言

       继续跟着之前推文的步骤,继续分享与Linux进程间通信方式相关的推文,本次的推文内容是IPC通信机制的简述。

02

什么是IPC

IPC

内核当中为了增强进程与进程之间数据交互及效率的一种机制的对象

e7adee503121023a7d615d0d5e367547.png

英文名

Inter Process Communication

0e939614207b99987f0fcb9aca086207.png

中文名

进程间通信

03

IPC包含什么?

2,IPC里面有什么:
  1、消息队列:
    你可以完全的理解它是一个增强型的管道:
    1.1、具备管道的思想,可以往里面发送及读取数据
    1.2、每一个数据都可以夹带类型
    1.3、我们可以指定只读指定的类型的数据,其他数据,继续存放在这个消息队列中
    
  2、共享内存:
    速度最快的一种进程间通信方式:
    在内核空间(物理内存)中开辟一块内存出来,映射给不同的进程的虚拟内存中,
    这样我们就可在不同的进程中访问同一块内存

  3、信号量:
    操作某种资源的进程间的同步互斥操作体系,
      相当于一个增强型的全局变量(全局于不同进程中),
      用来代表一种资源,当资源没有的时候,我们会陷入睡眠
    信号量的特点:
    3.1、进程都可以访问这个变量
    3.2、进程可以加减这个变量
    3.3、当这个变量减到为0的时候,你再想去减它,
    它就让你进程陷入睡眠,等到这个变量的值你减的时候不会小于0,
    它才会让你进程继续往下面工作

04

IPC编程流程

程序构架流程
1,新建IPC对象,获取IPC的key
  1.1、ftok(const char *pathname, int proj_id);
  
2,通过key初始化消息队列/共享内存/信号量对象
  2.1、并且获取相应的ID
    2.1.1、int msgget(key_t key, int msgflg)
        消息队列
    2.1.2、int shmget(key_t key, size_t size, int shmflg)
        共享内存
    2.1.3、int semget(key_t key, int nsems, int semflg);
        信号量
        
3,根据不同的对象开始操作
   ...中间各种骚操作

4,删除对象

05

通用API

key_t ftok(const char *pathname, int proj_id);

需包含头文件

#include 
#include 

函数功能:获取一个IPC对象的key,
      方便我们在后期通过这一个key创建一个IPC对象,
      其可以为共享内存或者消息队列或者信号量

参数:
     pathname:一个路径名,用来通过和一个路径与该函数的第二个参数去得到一个IPC的key
     proj_id:这个是一个不为0的小于或等于255的数值,用来跟pathname组合得到IPC的key
返回值:
     成功返回一个IPC对象的key值,失败则返回-1,errno会被设置

06

其他说明

同一类型对象唯一ID说明
  1、fork函数创建时的有效参数
  2、各种对象的ID获取

以上两个步骤,
  1、对于共享内存和信号量而言,需一致
  2、对于消息队列而言,要对type进行设置

07

结尾

       本次推文内容到这里就结束了,本次的内容只是推IPC通信机制的组成作简要说明,如需深入了解的童鞋,可自行查找资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值