0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进程间通信的消息队列介绍

学益得智能硬件 来源:学益得智能硬件 2024-04-08 17:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

消息队列是一种非常常见的进程间通信方式。

使用消息队列也很简单。首先是创建消息队列,消息队列由内核来维护,创建成功后,用命令ipcs可以看到。一个进程往消息队列中写入数据,另一个进程从消息队列中读取数据。乍一看,跟管道的读写操作一样。

但是它比管道更加实用,发送数据的时候,可以指定数据的类型。也就是说,发出去的数据被分成了两份,一份是具体的数据,另一份用来表示类型。这样即使有多个进程来读取数据,只要各自指定了类型,数据就不会乱。

而管道却没有这么灵活,如果有多个进程读取管道数据,先读的进程就能获得全部数据。

消息队列主要涉及这么几个函数。创建消息队列使用msgget,第一个参数是key,用于区分内核中不同的消息队列,第二个参数表示创建消息队列且消息队列不存在。

发送数据使用msgsnd,参数分别是消息队列标识、发送的数据、数据的长度以及标志位。

接收数据使用msgrecv,多了一个参数表示数据的类型。

运行程序,一个进程写入数据,另一个进程就能把数据读取出来。

这就是进程间通信的消息队列,他比管道和信号更加实用,如果有多个进程需要传输数据,用消息队列更加合适。


审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 消息队列
    +关注

    关注

    0

    文章

    34

    浏览量

    3237

原文标题:进程间通信之消息队列

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    优先级队列介绍

    队列(Queue)的知识点:「概念」:队列是一种先进先出(FIFO)的数据结构,类似于排队的概念。「基本操作」:enqueue(item): 将元素添加到队列的末尾。dequeue(): 从
    发表于 11-26 07:56

    Linux进程通信(IPC)全解析:从管道到 Socket,一篇讲透

    在 Linux 世界里,进程并非孤立存在。无论是后台服务协作(如 Web 服务器与数据库)、命令行工具联动(如ps | grep),还是复杂应用的模块通信,都离不开 进程
    的头像 发表于 11-14 21:38 1.2w次阅读
    Linux<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>(IPC)全解析:从管道到 Socket,一篇讲透

    基于环形队列的UART收发回显实验

    在实际项目开发中,由于有些串口不具备FIFO(如SCI1和SCI2)或FIFO的buffer比较小,这可能会在数据处理速度小于数据接收速度的时候,导致数据的丢失。因此我们可以设计一个队列来避免这一
    的头像 发表于 10-27 13:51 1710次阅读
    基于环形<b class='flag-5'>队列</b>的UART收发回显实验

    NVMe高速传输之摆脱XDMA设计30: NVMe 设备模型设计

    为 NVMe 设备模型配置空间类,在类中提供读写功能函数方便调用。 NVMe 设备模型的工作通过 TLP 接收进程、 Admin 提交队列进程、 Admin 完成队列
    发表于 09-29 09:31

    【HZ-T536开发板免费体验】—— linux 进程创建

    Linux进程通信方式有这几种: 1。管道 2。信号量 3。消息队列 4。共享内存 在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。 1,进程
    发表于 09-01 20:49

    NVMe IP高速传输却不依赖XDMA设计之九:队列管理模块(上)

    这是采用PCIe设计NVMe,并非调用XDMA方式,后者在PCIe4.0时不大方便,故团队直接采用PCIe设计,结合UVM验证加快设计速度。 队列管理模块采用队列的存储与控制分离的设计结构。
    的头像 发表于 08-04 09:53 602次阅读
    NVMe IP高速传输却不依赖XDMA设计之九:<b class='flag-5'>队列</b>管理模块(上)

    RabbitMQ消息队列解决方案

    在现代分布式系统架构中,消息队列作为核心组件,承担着系统解耦、异步处理、流量削峰等重要职责。RabbitMQ作为一款成熟的消息队列中间件,以其高可用性、高可靠性和丰富的特性,成为众多企业的首选方案。本文将从运维工程师的角度,详细阐述RabbitMQ从单机部署到集群搭建的完
    的头像 发表于 07-08 15:55 439次阅读

    从 app_gatt_callback调用这个队列推送函数时,程序出现了硬故障怎么解决?

    我正在尝试在 wiced BLE 堆栈中使用基于演员的设计模式。 因此,所有任务都使用消息队列相互通信。 消息队列将保存块大小为 64 的内存池指针的地址。 我维护着一个由这些池地址指针组成的
    发表于 07-04 06:03

    RDMA简介6之RoCEV2连接管理

    绑定的队列对之间可以进行通信队列对无法与任何一个非绑定的队列对进行通信。而在无连接传输中,队列
    发表于 06-13 09:50

    RDMA简介5之RoCE V2队列分析

    (RDMA Write with immediate)操作不在此范围内)。RoCE v2作为RoCE v2协议通信的重要机制,通常有五种队列工作状态,分别为:重置(RESET)状态、初始化(INIT
    发表于 06-05 17:28

    NVME控制器之队列管理模块

    如图1所示。 图1 队列管理模块框图 在NVMe协议中,使用队列来传输、缓存和处理命令条目,以实现Host端和NVMe SSD端之间的通信。在CPU上运行NVMe软件协议栈,其Host端生成提交命令
    发表于 05-03 20:19

    NVME控制器之队列管理模块

    队列管理模块是整个NVMe Host控制器的核心模块,该模块实现了提交队列与完成队列的管理,多队列请求的仲裁判决等功能。队列管理模块中含有数
    的头像 发表于 05-03 15:32 429次阅读
    NVME控制器之<b class='flag-5'>队列</b>管理模块

    Linux进程状态详解

    进程状态是task_struct内的一个整数;进行:进程在调度队列中,进程的状态都是running,阻塞:等待某种设备或者资源就绪。进程是一
    的头像 发表于 04-01 09:46 815次阅读
    Linux<b class='flag-5'>进程</b>状态详解

    STM32双核H7核如何通信

    STM32双核H7核通信的方法,主要是CM7和CM4之间如何进行数据传递
    发表于 03-12 07:34

    DLPC150和DMD2010NIR通信协议是什么?

    DLPC150和DMD 2010NIR通信协议是什么?传输的DATA和CLK如何控制每一个微镜单元的翻转呢?能不能提供一些资料呢?
    发表于 02-28 08:14