玩一下linux下的消息队列

linux下消息队列详解 消息队列提供了从一个进程向另外一个进程发送一块数据的方法,每个数据块认为有一个类型(通俗说法是一个通道),但是接受通道与发送通道必须一致才能实现通信。消息队列的不足之处在于每个消息最大长度有限度,每个消息队列总字节数有限制,系统的消息队列有限制。 命令: cat /proc/sys/kernel/msgmax :查看一条信息最大有多大 cat /proc/sys/kernel/msgmnb 阅读详情

消息队列的特性:

1)消息队列是一个消息链表,用户可以在消息队列中添加消息、读消息

2)调用的进程必须拥有足够的权限才能对消息队列进行读、写操作

3)消息队列可以按照类型来发现或者接收消息

4)消息队列是IPC对象的一种。消息队列中可以通过唯一的ID来标识

    (IPC对象是活动在内核级别的一种,是进程间通信的工具)

 

接收端代码:

​
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
#define MSG_SIZE 1024
 
struct msgbuffer 
{
            long m_type;       		/* message type, must be > 0 */
            char m_text[MSG_SIZE];    /* message data */
};
 
int main()
{
    struct msgbuffer msgb;  
    
    key_t key=ftok(".",0);
 
    msgb.m_type=1;
    int msgID=msgget(key,IPC_CREAT|0666);
    
    //接收消息
    msgrcv(msgID,(void*)&msgb,MSG_SIZE,msgb.m_type,0);
 
    printf("m_text=%s m_type=%ld\n",msgb.m_text,msgb.m_type);
 
    //删除消息队列
    if(msgctl(msgID,IPC_RMID,NULL)<0)
    {
        fprintf(stderr,"msgid %d error\n",msgID);
        exit(0);
    }
    
 
    return 0;
}
 
​

发送端代码:

​
​
​
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdio.h>

#define MSG_SIZE 1024
//定义一个消息结构体
struct msgbuf 
{
            long m_type;       /* message type, must be > 0 */
            char m_text[MSG_SIZE];    /* message data */
};

int main()
{
		struct msgbuf msgb;
		msgb.m_type = 1;
    
        //因为是测试消息队列,所以把数据量写大点		
		strcpy(msg.m_text,"hello worldhello world jasodoahjshiushduihwudhbsauihgdasoidasoidjslakdjklasjdoiasjhdoiqwhdiouashjkdhskjdhkajshd1234566549789787932yeiu3hjkashdasudhnsajkdhuiashdkjsahdjkshdkjashdijashdkjashdksajhdoiuasydh978yuoisah97dy3hiudhkjwhdiashdjksahdkjsahdjkashdjkashdkjashdkjsahdjk
\n");
		
		key_t key = ftok(".",0);
		
		int msgid = msgget(key,IPC_CREAT|0666);
	
        //发送消息
		if((msgsnd(msgid,(void*)&msgb,sizeof(msgb.m_text),0))==0)
		{ 
			printf("msg send success\n");
		}
		
	return 0;
}

​

​

​

输出:

 

ipcs -q : 显示所有的消息队列

ipcs -qt: 显示消息队列的创建时间、发送和接收最后一条消息的时间

ipcs -qp:显示往消息队列中存消息,和从消息队列中取消息的进程ID

ipcs -q -i msgid: 显示该消息队列结构体中的消息信息:

ipcs -ql : 显示消息队列的限制信息:

在 Zemax 非序列模式下建立干涉仪模型 Zemax 利用其相干检测功能,将到达探测器的射线的能量相干地组合起来,同时考虑每条检测到的射线的幅度和相位。从对这些干涉条纹的定量评估来看,光学干涉仪具有广泛的应用,包括在天文学中用于测量天体的大小,在计量学中用于精确测量距离,在显微镜中用于提高分辨率,以及在物理和工程的各个领域中用于检测条件的微小变化。在光学干涉仪中,使用的是光波。非相干和相干相加的总功率是守恒的,但相干光束的峰值辐照度应该是非相干光束总和的 2 倍,这是理所当然的。请注意,条纹的缺失是显而易见的,因为不再从相干的角度观察探测器。 阅读详情

相关推荐

数据仓库实践:从ITR流程讲指标体系建设

从 ITR 流程或者其他客服反馈流程的考核过程可见,实际工作中不可能只通过单个指标评价一个业务过程,需要从多个维度梳理业务,并把多个高度相关的指标组织起来,以避免只考虑其中某个指标从而摧毁整个业务过程的结果,指标体系=指标+体系。

the_singing_towers的博客 2265

Linux--进程通信之消息队列的双向通信

一、消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认 为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息 来避免命名管道的同步和阻塞问题。 二、消息队列的特点 1.消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.      2.消息队列允许一个或多个进程向它写入与读取消息.

哥不帅但很坏的博客 2736

大模型面试题52:LLM如果在训练过程中loss值出现spike应该怎么办?

小白急救:停更→回滚→降LR→裁剪梯度,先保住训练不崩溃;进阶排查:查数据→查优化器→查硬件,找到spike的根因并解决;深层预防:预处理保守配置+训练中实时监控,从源头规避spike。先止损,再溯源,最后预防。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1168

Linux 练习九 (IPC 消息队列)

进程间通信——消息队列。

to_upper的博客 646

PWM调节DCDC参数计算原理

SOC芯片的核电压、GPU电压、NPU电压、GPU电压等,都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS(Dynamic Voltage and Frequency scaling),优化性能和功耗。

电子绿洲的博客 3158

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

C++ 实现一个消息队列

消息队列在多线程的场景有时会用到,尤其是线程通信跨线程调用的时候,就可以使用消息队列进行通信。C++实现一个能用的消息队列还是比较简单的,只需要一个队列一个互斥变量和一个条件变量,这些在标准库中都有提供。基于曾经写过的项目,总结出来最简单的消息队列的实现将在下文中介绍。

codeofcc的博客 1万+

S32K3 MCAL配置 【MCU、PORT、DIO】

1、s32k3时钟源可由PLL, FXOSC, FIRC, SIRC, and SXOSC五种时钟源生成,可按照手册推荐配置。目标是在在S32K344板子上点亮红色LED灯,需要配置的有MCU、PORT、DIO模块。MCU最主要的是时钟配置,要翻看芯片手册,理解时钟树。1、通用配置中,没有什么特殊需求按照demo配置就好。1、配置MC_CGM mux 0 clocks时钟。1、外部晶振配置按照实际项目原理图进行配置。1、外部晶振配置,按照实际项目配置。1、PLL时钟按照手册进行配置。

weixin_43741076的博客 3243

c语言-消息队列

一、消息队列的介绍消息队列的实现原理是将消息存储在一个队列中,生产者将消息放入队列的尾部,消费者从队列的头部取出消息进行处理。消息队列通常采用先进先出(FIFO)的方式进行消息的存储和处理。消息队列可以实现异步通信,提高系统的可靠性和可扩展性。具体实现上,消息队列通常由以下几个组件构成:消息队列:用于存储消息的队列。生产者:向消息队列中添加消息的组件。消费者:从消息队列中取出消息并进行处理...

weixin_46158019的博客 1872

线程池详解(通俗易懂超级好)

目标 【理解】线程池基本概念 【理解】线程池工作原理 【掌握】自定义线程池 【应用】java内置线程池 【应用】使用java内置线程池完成综合案例 线程池 线程池基础 线程池使用 线程池综合案例 4.学员练习 5.线程池总结 概念介绍 1:什么是线程池 2:为什么使用线程池 3:线程池有哪些优势 什么是池 什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runna.

拉格朗日的学习笔记 12万+

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 705

linux c 消息队列简介

消息队列和共享内存、信号量一样,同属 System V IPC 通信机制。消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问。使用消息队列的好处是对每个消息指定了特定消息类型,接收消息的进程可以请求接收下一条消息,也可以请求接收下一条特定类型的消息。 相关数据结构 与其他两个 System V IPC 通信机制一样,消息队列也有一个与之对应的结构,该结构的定义如下: ...

whatday的专栏 1899

基于 Simulink 的双向 DC/AC 逆变器中 IGBT/MOSFET 寄生参数影响分析实战教程

摘要:本教程详细解析了Simulink中IGBT/MOSFET寄生参数对双向DC/AC逆变器的影响。通过对比理想模型与含寄生参数(如20nH内部电感、50nH回路电感)的仿真,揭示了电压尖峰、高频振荡等实际问题。建模步骤包括搭建基准电路、引入寄生参数、配置高精度求解器(步长10ns),并给出抑制措施:添加RC缓冲电路、调整驱动电阻。关键发现:寄生参数会显著增加开关损耗和EMI噪声,需通过参数扫描优化设计。教程还提供了代数环报错、仿真速度优化等实战技巧,帮助工程师从理想仿真过渡到高保真分析。

xiaoheshang_123的博客 68

Linux——消息队列

消息队列是一种用于在应用程序之间传递和存储数据的通信机制。它允许应用程序将消息发送到队列中,然后由另一个应用程序从队列中接收和处理这些消息。消息队列可以有效地实现异步通信、解耦应用程序之间的依赖关系,以及实现消息的持久化和顺序处理。常见的消息队列系统包括RabbitMQ、Kafka、ActiveMQ等。消息队列在现代分布式系统和微服务架构中被广泛应用。

m0_74774362的博客 1373

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LINUX 消息队列的容量探讨

LINUX消息队列可能不是你想的那样

wubing_2010的专栏 3330

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux消息队列

通过上述步骤和示例代码,可以看出Linux系统中消息队列的使用方法。消息队列提供了一种灵活且高效的进程间通信方式,适用于需要异步通信的场景。

如无必要,勿增实体。 1383

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux系统编程之消息队列

消息队列是一种进程间通信机制,通过发送和接收消息实现数据交换。它基于队列数据结构,支持多种消息类型和优先级,具有灵活性、可靠性和异步通信的优势。在Linux系统中,消息队列通过POSIX和SystemV接口实现。POSIX消息队列提供简单接口,支持优先级排队和异步通知,适合实时系统。SystemV消息队列虽然设计较早,但提供更细致的控制,支持消息过滤。两种消息队列均通过特定函数实现消息的发送、接收和管理。

hope_wisdom的技术博客 1289

Linux中消息队列

【代码】Linux中消息队列。

weixin_51034082的博客 838

linux 消息队列

这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂: Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了! 消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序。可以解决两个进程的读写速度不同(处理数据速度不同),系统耦合等问题,而且消息队列里的消息哪怕进程崩溃了也不会消失。 最简单的消息内存的使用流程 ①ftok函数生成键值 ②msgget函数创建消息队列.

manongxianfeng的博客 5680

linux消息队列

可以通过发送消息来避免命名管道的同步和阻塞问题。 管道 消息 流管道 先进先出 有边界 可以后进入、先出来 消息大小三大限制 一、什么是消息队列? 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。 消息队列与命名管道一样的不足,Linux用宏: MSGMAX来限制一条消息的最大长...

Hash 3120

linux 消息队列最大值,linux 消息队列的限制

消息队列的系统限制作者:冯老师,华清远见嵌入式学院讲师。消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制。第一:议个消息的最大长度;第二:消息队列的最大容量;第三:最大消息队列数。一、 一个消息的最大长度示例程序如下:#include #include #include #include #include #include #define...

weixin_31497453的博客 3943

Linux系统中的POSIX消息队列

消息队列是Linux IPC中很常见的一种通信方式,它通常用来在不同进程(线程)间发送特定格式的消息数据。一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必须已经打开来读。IPC的持续性不同。当管道和FIFO最后一次关闭发生时,仍在管道和FIFO中的数据会被丢弃。消息队列是随内核的持续性,即一个进程向消息队列写入消息后,然后终止,另外一个进程可以在以后的某个时刻打开该队列读取消息。

m0_51370181的博客 1397

Linux之消息队列机制

一.消息队列先知 其实,消息队列与命名管道有很多相似之处,但少了在打开和关闭管道方面的复杂性。但使用消息队列应为解决我们在,命名管道时遇到的一些问题,比如管道的阻塞问题。 消息队列提供了一种子啊两个不想管的进程之间传递数据的相当简单且有效的方法,与命名管道相比,消息队列的优势在于,它独立于发送和接收进程而存在。 消息队列提供了一种从一个进程想另一个进程发送一个数据块的方法。每个数据块都被认为...

Zkr吖頭~的博客 4516

Linux_POSIX消息队列

POSIX 消息队列(POSIX Message Queues)是 POSIX IPC(进程间通信)机制的一种,它允许进程间通过发送和接收具有固定最大长度的消息来进行通信。与管道和命名管道相比,POSIX 消息队列提供了更高级的功能,例如消息类型化和非阻塞操作。本文将指导你如何在 Linux 环境下使用 C 语言编写程序来操作 POSIX 消息队列。在POSIX消息队列中,我们常用的主要的函数有: mqd_t mq_open函数 原型: mq_send函数 原型: 首先,我们需要使用函数来创建或打开

坏柠的博客 1027
上一篇: 有名管道的实现
下一篇: linux之共享内存是什么
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值