iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux消息队列如何实现进程间通信
  • 380
分享到

Linux消息队列如何实现进程间通信

2023-06-09 15:06:08 380人浏览 泡泡鱼
摘要

这篇文章主要介绍linux消息队列如何实现进程间通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux消息队列实现进程间通信实例详解一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法

这篇文章主要介绍linux消息队列如何实现进程间通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Linux消息队列实现进程间通信实例详解

一、什么是消息队列

消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制

Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。

二、在Linux中使用消息队列

Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System V PIC机制,即信号量和共享内存相似。

进程间通信(IPC):进程间通信的本质就是通过让不同的进程看到一份公共的资源来实现通信。

常用的进程间通信的方式有两种:通过管道和systemv标准,今天我们来介绍systemv标准中的一种:消息队列

消息队列:消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,每个数据块都认为是有一个类型,接受者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。

特点:

(1)消息队列可认为是全局的一个链表,由消息队列标识符进行标识。
(2)消息队列允许一个或多个进程写入或读取消息
(3)消息队列的声明周期随内核
(4)消息队列可以实现双向通信

创建一个消息队列:msget()
Linux消息队列如何实现进程间通信
第一个参数:每一个消息队列都有唯一的key值,可以由ftok()产生

第二个参数:一般由两个选项IPC_CREAT和IPC_EXCL,单独使用ipc_creat时,如果消息队列不存在则创建一个,如果存在则打开 IPC_EXCL 如果同时使用,如果消息队列不存在则创建之,如果存在则出错返回。当单独使用IPC_EXCL时,没有意义。

ftok:
Linux消息队列如何实现进程间通信
参数可由用户指定。

下面用代码实现消息队列的创建:

在创建一个消息队列(其他ipc相同)时,需要先通过文件路径名和项目ID获取一个键值,然后通过此键值由内核生成标识符,在以后可通过此标识符来使用此消息队列。
Linux消息队列如何实现进程间通信

为什么要有key值和标识符两个值呢?

描述符是对于用户操作而言的,让用户感觉操作和对文件的操作相同,key是对于系统内部说的。

我们使用ftok来创建key值,具体可以man一下fotk函数,大概是这样的:按给定的路径名取得其stat结构,从该结构中取出部分st_dev和st_ino字段,然后再与项目id组合起来,如果两个路径名引用两个不同的文件,那么,对这两个路径名调用ftok通常返回不同的key值,但是,因为i节点号和key通常都存放在长整型中,于是创建key时可能会丢失信息,这意味着,如果使用同一项目id,那么对于不同文件的两个路径名可能产生相同的key值。而标识符是唯一确定的,可以用来区别于其他ipc的。

删除消息队列:msgctl()
Linux消息队列如何实现进程间通信
代码实现:
Linux消息队列如何实现进程间通信

发送消息:msgsnd()

接收消息:magrcv(),这两个函数实现进程间的双向通信
Linux消息队列如何实现进程间通信 

参数:msqid-消息队列标识码

msgp-指向消息缓冲区的指针,此位置是用来暂时存储发送和接收的消息,是一个用户可定义的通用结构。
msgtyp-从消息队列内读取的消息形态。如果值为0,则表示消息队列中,所有消息被读取。
msgsz:消息的大小

返回值:成功返回0,失败则返回-1.
Linux消息队列如何实现进程间通信

那么如何查看系统中正在运行的消息队列呢?

介绍两个命令:ipcs -q 查看消息队列

ipcrm -q msgid 删除此消息队列
Linux消息队列如何实现进程间通信

以上是“Linux消息队列如何实现进程间通信”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: Linux消息队列如何实现进程间通信

本文链接: https://www.lsjlt.com/news/256654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux消息队列如何实现进程间通信
    这篇文章主要介绍Linux消息队列如何实现进程间通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux消息队列实现进程间通信实例详解一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法...
    99+
    2023-06-09
  • Linux消息队列实现进程间通信实例详解
    Linux消息队列实现进程间通信实例详解 一、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构...
    99+
    2022-06-04
    队列 详解 实例
  • Linux进程间通信中如何使用消息队列
    本篇文章给大家分享的是有关Linux进程间通信中如何使用消息队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个...
    99+
    2023-06-16
  • Java进程间通信之消息队列
    目录消息队列1.消息队列的原理2.消息队列的接口:2.1创建消息队列2.2向消息队列发送消息2.3接收消息:2.4操作消息队列的接口2.5代码测试:信号量:信号量的原理总结消息队列 ...
    99+
    2022-11-13
  • Python如何通过队列实现进程间通信
    本篇内容主要讲解“Python如何通过队列实现进程间通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何通过队列实现进程间通信”吧!一、前言在多进程中,每个进程之间是什么关系呢?其...
    99+
    2023-07-02
  • Redis中如何实现消息队列和延时消息队列
    这篇文章将为大家详细讲解有关Redis中如何实现消息队列和延时消息队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。list的几个命令lpush (left push)由...
    99+
    2022-10-19
  • Python通过队列实现进程间通信详情
    目录一、前言二、队列简介三、多进程队列的使用四、使用队列在进程间通信一、前言 在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态...
    99+
    2022-11-11
  • Linux中怎么实现消息队列编程
    Linux中怎么实现消息队列编程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、概念消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定...
    99+
    2023-06-12
  • 如何分析Linux消息队列编程
    这期内容当中小编将会给大家带来有关如何分析Linux消息队列编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然...
    99+
    2023-06-28
  • Redis如何实现消息队列功能
    Redis如何实现消息队列功能随着互联网的发展,消息队列在分布式系统中变得越来越重要。消息队列允许不同的应用程序之间通过异步通信来传递和处理消息,提高了系统的可伸缩性和可靠性。Redis作为一款快速、可靠、灵活的内存数据库,也可以用来实现消...
    99+
    2023-11-07
    redis 实现 消息队列
  • 如何在PHP中实现消息队列?
    随着互联网应用和系统架构的复杂化,消息队列技术越来越被广泛应用。消息队列是一种异步处理消息的机制,常用于系统解耦、流量削峰、任务排队等场景。在PHP应用中,也可以使用消息队列来提高应用的可靠性、可扩展性、可维护性等方面的性能。本文将介绍如何...
    99+
    2023-05-14
    PHP 实现 消息队列
  • 如何使用redis实现消息队列
    使用redis实现消息队列的示例:redis的pubsub功能实现发布订阅模式,代码:import redisclass Task(object):def __init__(self):self.rcon = redis.StrictRed...
    99+
    2022-10-24
  • 如何利用rabbitMq的死信队列实现延时消息
    目录前言mq基本的消息模型mq死信队列的消息模型maven依赖配置普通队列和死信队列死信队列消费者发送消息测试测试成功总结前言 使用mq自带的死信去实现延时消息要注意一个坑点,就是m...
    99+
    2023-01-28
    rabbitMq死信队列 rabbitMq延时消息 rabbitMq延时队列
  • PHP开发中如何处理消息队列和异步通信
    引言:消息队列和异步通信在现代的软件开发中已经变得越来越常见。它们可以提高系统的并发性和容错性,实现任务解耦和业务解耦。本文将介绍如何在PHP开发中处理消息队列和异步通信,并提供具体的代码示例。一、什么是消息队列?消息队列是一种高效的通信模...
    99+
    2023-10-21
    消息队列 处理 异步通信
  • C#开发中如何处理消息队列和异步通信问题
    C#开发中如何处理消息队列和异步通信问题引言:在现代软件开发中,随着应用程序的规模和复杂程度不断增加,有效处理消息队列和实现异步通信变得非常重要。一些常见的应用场景包括分布式系统间的消息传递、后台任务队列的处理、事件驱动的编程等。本文将探讨...
    99+
    2023-10-22
    消息队列 异步通信 C#开发
  • 详解redis是如何实现队列消息的ack
    前言 由于公司提供的队列实在太过于蛋疼而且还限制不能使用其他队列,但为了保证数据安全性需要一个可以有ack功能的队列。 原生的redis中通过L/R PUSH/POP方式来实现队列的功能,这个当然是没办法满...
    99+
    2022-06-04
    队列 如何实现 详解
  • Linux进程间通信怎么实现
    这篇文章主要讲解了“Linux进程间通信怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux进程间通信怎么实现”吧!共享内存共享内存可以说是最有用的进程间通信方式,也是最快的IP...
    99+
    2023-07-05
  • Linux进程间如何通信
    这篇文章主要介绍“Linux进程间如何通信”,在日常操作中,相信很多人在Linux进程间如何通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux进程间如何通信”的疑惑...
    99+
    2022-10-19
  • Electron进程间通信如何实现
    今天小编给大家分享一下Electron进程间通信如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用Electron开...
    99+
    2023-06-30
  • oracle数据如何通过goldengate实时同步到kafka消息队列中
    这篇文章主要介绍oracle数据如何通过goldengate实时同步到kafka消息队列中,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境介绍组件版本组件版本描述源端oracleo...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作