system V IPC进程间通信机制一网打尽

目录

必备IPCS命令解析

ipcs  

ipcrm   

Linux IPC消息队列

msgget

msgsnd

msgrcv

msgctl

Linux IPC信号量

理解信号量

semget

semop

semctl

Linux IPC共享内存

shmget

shmat

shmdt​ 

shmctl


本文纯粹就是小杰对于自己学完Linux操作系统之后回过头来对于Linux中的核心重点知识的一个梳理. 
小杰会尽量地将其梳理清楚, 大家一起学习,共同进步, 知识不分高低, 计算机的学习小杰认为也是一个    
量变   --->   质变    的过程
天道酬勤, 水滴石穿, 在不同的阶段就干好自己当前阶段力所能及之事,  至少是没有在寝室的床上瘫着消磨时光                                                 --------   愿大家都学有所成,所获

必备IPCS命令解析

  • ipcs  

功能 : 查看 system V IPC进程间通信设施的信息

常用选项

-a : 查看所有通信设施信息, 不加选项默认-a

-m : 指定查看共享内存

-q  : 指定查看消息队列

-s   : 指定查看信号量 

  • ipcrm   

功能:删除System V进程间通信(IPC)对象和关联的数据结构

使用方式:  ipcrm 选项 id号

常用选项

-m : 删除共享内存

-q : 删除消息队列

-s : 删除信号量

eg : 指定删除shmid = 18 和  msqid = 8的 IPC对象.

Linux IPC消息队列

消息队列提供了一个进程向另外一个进程传输一个数据块的方法

消息队列优势: 对比管道通信来看

  1.  避免了管道通信的同步阻塞问题    eg : 读进程从管道中读取数据, 但是管道中并没有数据可读, 此刻读进程就需要同步阻塞等待写进程写入数据.
  2. 消息队列不必像管道那样先进先出的接收数据了, 消息队列可以根据类型(type值)来有选择地接收数据
  • msgget

 

函数功能: 创建一个全局消息队列IPC对象.   (内核数据结构)

参数分析:  key 唯一标识, 唯一标识一个全局的消息队列.   msgflg指定权限

返回值: 成功返回一个正整数, 代表消息队列的句柄, 失败返回 -1,并且设置errno

插一个权限介绍:     r : 读权限    w : 可写权限   X : 可执行权限.   所谓的9位权限标识位, 就是针对: 文件拥有者, 文件拥有组人员, 其他人员的访问权限的限制

  • msgsnd

函数功能:发送一条消息到消息队列中

参数分析: 

  1. msqid 之前msgget返回的消息队列句柄
  2. msgp 指针, 指向待发送的一条消息结构体, 结构体形式如下
  3. msgsz  消息正文的存储空间, 最多可以存下msgsz个字节的正文
  4. msgflg 控制发送消息的形式  eg: 常用的 IPC_NOWAIT 表示非阻塞发送, 意思就是说正常没有设置非阻塞的情况下, 如果消息队列满了, 就会阻塞等待, 但是设置了IPC_NOWAIT则会立刻返回, 并且设置errno = EAGAIN
struct msgbuf {
    long mtype;       /* message type, must be > 0 */
    char mtext[1];    /* message data */
};
//我们必须按照这个形式设置msgbuff

返回值:成功返回 0, 失败返回 -1 并且设置errno

  • <
评论 123
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杰312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值