消息队列是一种非常常见的进程间通信方式。
使用消息队列也很简单。首先是创建消息队列,消息队列由内核来维护,创建成功后,用命令ipcs可以看到。一个进程往消息队列中写入数据,另一个进程从消息队列中读取数据。乍一看,跟管道的读写操作一样。
但是它比管道更加实用,发送数据的时候,可以指定数据的类型。也就是说,发出去的数据被分成了两份,一份是具体的数据,另一份用来表示类型。这样即使有多个进程来读取数据,只要各自指定了类型,数据就不会乱。
而管道却没有这么灵活,如果有多个进程读取管道数据,先读的进程就能获得全部数据。
消息队列主要涉及这么几个函数。创建消息队列使用msgget,第一个参数是key,用于区分内核中不同的消息队列,第二个参数表示创建消息队列且消息队列不存在。
发送数据使用msgsnd,参数分别是消息队列标识、发送的数据、数据的长度以及标志位。
接收数据使用msgrecv,多了一个参数表示数据的类型。
运行程序,一个进程写入数据,另一个进程就能把数据读取出来。
这就是进程间通信的消息队列,他比管道和信号更加实用,如果有多个进程需要传输数据,用消息队列更加合适。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
消息队列
+关注
关注
0文章
34浏览量
3302
原文标题:进程间通信之消息队列
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
RDMA设计43:队列删除及连接断开功能测试
在接收到正确的删除队列请求后,首先进入连接断开流程,即四次挥手断链,如图中红框部分。随后进行队列删除操作。返回队列操作状态 0x2b,符合设计预期,验证通过。
RDMA设计25:队列管理模块之发送模块详细设计分析
发送队列存储为所有发送队列共用的存储空间,根据用户环境和开发板环境不同可由 BRAM、URAM 或 LUTRAM 实现。发送队列管理单元则负责管理这个存储空间,并处理用户指令和发送队列
RDMA设计17:队列管理模块设计2
。
(2)接收队列
接收队列由一个接收队列管理单元组成。与发送队列类似的是,接收队列管理单元也由若干表单构成,其中包括 RQ1 表单和用户
发表于 01-04 14:54
C语言的循环队列
data;
}
return -1; // Buffer is empty
}
循环队列是一种高效的数据结构,适用于缓冲区和数据流应用,例如串口通信接收缓冲。
发表于 12-12 08:28
优先级队列介绍
队列(Queue)的知识点:「概念」:队列是一种先进先出(FIFO)的数据结构,类似于排队的概念。「基本操作」:enqueue(item): 将元素添加到队列的末尾。dequeue(): 从队
发表于 11-26 07:56
Linux进程间通信(IPC)全解析:从管道到 Socket,一篇讲透
在 Linux 世界里,进程并非孤立存在。无论是后台服务协作(如 Web 服务器与数据库)、命令行工具联动(如ps | grep),还是复杂应用的模块通信,都离不开 进程间
基于环形队列的UART收发回显实验
在实际项目开发中,由于有些串口不具备FIFO(如SCI1和SCI2)或FIFO的buffer比较小,这可能会在数据处理速度小于数据接收速度的时候,导致数据的丢失。因此我们可以设计一个队列来避免这一
【HZ-T536开发板免费体验】—— linux 进程创建
Linux进程通信方式有这几种:
1。管道
2。信号量
3。消息队列
4。共享内存
在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。
1,进程
发表于 09-01 20:49
RabbitMQ消息队列解决方案
在现代分布式系统架构中,消息队列作为核心组件,承担着系统解耦、异步处理、流量削峰等重要职责。RabbitMQ作为一款成熟的消息队列中间件,以其高可用性、高可靠性和丰富的特性,成为众多企业的首选方案。本文将从运维工程师的角度,详细阐述RabbitMQ从单机部署到集群搭建的完
进程间通信的消息队列介绍
评论