Linux--消息队列

2023-11-16

目录

一、线程和进程的概念

1.线程:

2.进程:

3.ipcs:

二、消息队列代码--写消息

//man msgget返回值问题

 //添加消息队列 man msgsnd

//运行代码 

//运行结果图

//进程和消息的状态

 三、消息队列代码--读消息

 //b.c读取消息

//执行b程序结果

 //读完全部消息继续读

 //解除阻塞


一、线程和进程的概念

 //可以有多个进程,至少有两个(一个读取一个写入,可以多个写入多个读入)

1.线程:

进程内部的一条执行路径(序列)

2.进程:

一个正在运行的程序

3.ipcs:

显示消息队列中都有哪些用户创建了消息队列

二、消息队列代码--写消息

//man msgget返回值问题

 //添加消息队列 man msgsnd

 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);//id,地址,数据大小,标志位

//运行代码 

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>

struct mess
{
    long type;//长整形,代表消息类型
    char data[128];
};

int main()
{
    int msgid =msgget((key_t)1235,IPC_CREAT|0600);
    if(msgid==-1)
    {   
        exit(0);
    }   
    
    //将mess结构体添加到消息队列中
    struct mess dt; 
    dt.type=1;//大于等于1的数字,代表类型
    strcpy(dt.data,"hello1");
    msgsnd(msgid,(void*)&dt,128,0);
}

//运行结果图

//进程和消息的状态

a已经进程结束了,但是a进程创建的消息队列没有结束

 

 三、消息队列代码--读消息

 //b.c读取消息

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>

struct mess
{
    long type;
    char data[128];
};

int main()
{
    //得到id
    int msgid =msgget((key_t)1235,IPC_CREAT|0600);
    if(msgid==-1)
    {
        exit(0);
    }

    //获取消息
    struct mess dt; 
    msgrcv(msgid,(void*)&dt,128,1,0);//如果第四个数字为0,那什么类型的消息都可以接收,否则数字为几就接收哪种类型
    printf("read:%s\n",dt.data);//打印消息
}
~              

//执行b程序结果

读取消息,读一次消息- 1

 //读完全部消息继续读

此时已经将所有消息都读完了,如果继续读消息会阻塞

 //解除阻塞

再添加一个消息队列解除阻塞

b进程读不到a进程创建的消息

若a进程写入的是3号类型消息,b进程只能读1号类型的消息,那么a创建再多的消息,b也无法读到,会一直堵塞。

若想被b接收,可将类型改为0,代表的含义是不区分消息队列,可以接收全部的消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux--消息队列 的相关文章

随机推荐

  • 西电机器学习简答题核心考点汇总(期末真题,教材西瓜书)

    文章目录 前言 一 机器学习和深度学习区别以及原因 二 卷积核 池化层作用 三 SVM转化为对偶问题的优点 四 核函数的作用 五 特征的相似度定义 性质 六 预剪枝与后剪枝优缺点 七 密度直接可达 密度可达 密度相连定义 八 DBSCAN相
  • 前端:上传图片upload组件(传formData格式,后端返回图片文件流)

    使用组件 iview中的upload组件 html
  • 深入理解Flink的水位线

    Apache Flink是一个流处理框架 它支持事件时间和处理时间的概念 在处理流数据时 Flink通过水位线 Watermark 来追踪事件时间的进度 从而支持事件时间的操作 水位线是一种特殊的事件 它表示在此时间戳之前的所有事件都已经到
  • java八股文合集(附免费0积分下载链接)

    下面是地址 Java八股文一 java基础知识 Java八股文二 java集合框架 Java八股文三 Java多线程 Java八股文四 Java虚拟机 Java八股文五 MySQL Inno DB Java八股文六 spring相关 Jav
  • Python项目开发

    今天任务 1 创建Python项目为pythontest1以及test1 py文件 2 修改字号 3 输入九九乘法表程序 编译调试执行 4 配置全局pip镜像为阿里镜像 5 命令行中下载安装pygame包 新建项目 选择 Create Ne
  • Python解决OpenCV系列库安装报错问题

    1 pip install dlib 这个库的安装很大概率出现问题 可以去参考 Python dlib 无需编译安装 dlib 19 23 0 cp39 cp39 win amd64 whl 这里放一个百度网盘的链接 要求Python3 9
  • C#中Linq用法汇集

    C 中Linq常用用法 LINQ查询语法 有两种基本的方法来编写一个LINQ查询IEnumerable集合或IQueryable数据源 1 查询语法或查询表达式语法 2 方法语法或方法扩展语法或Fluent LINQ查询语法 查询语法与数据
  • linux各目录详细介绍

    bin 二进制可执行命令 dev 设备特殊文件 etc 系统管理和配置文件 etc rc d 启动的配置文件和脚本 home 用户主目录的基点 比如用户user的主目录就是 home user 可以用 user表示 lib 标准程序设计库
  • stm32定时器外部计数模式 最大频率计算。

    本 外部时钟模式下 外部信号通过内部时钟 CK INT 采样得到 外部信号周期的计算方法是 2xTINT 20ns 这里的TINT是CK INT的周期时间 例如 内部时钟频率为72MHz 则TINT 13 89ns 这时外部信号的最高频率是
  • flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作

    1 简陋版web智能玩具 FAQ py文件 import os from aip import AipSpeech AipNlp from uuid import uuid4 你的 APPID AK SK APP ID 16027160 A
  • Git命令查看以及修改用户名和密码

    一 查看 查看用户名 git config user name 查看密码 git config user password 查看邮箱 git config user email 查看配置信息 git config list 二 修改 修改用
  • ios删除分割线_iOS开发中隐藏导航栏的分割线

    iOS开发中经常会遇到需要隐藏导航栏的分割线的需求 之前已经有两种方法 方法一 直接设置navigationBar的ShadowImage和BackgroundImag 这样做可以一劳永逸 在当前导航控制器的所有子控制器页面看到的导航栏都是
  • js判断时间大小以及计算时间差

    有些时候我们需要使用JS判断一下不同格式的时间的大小该怎判断呢 例如 2019 06 26 14 00 00 这个格式的时间 如何判断是否大于现在的时间 function compareTimeNow time var strArray t
  • osgEarth的Rex引擎原理分析(十五)分页瓦片加载器在更新遍历时对请求处理过程

    目标 十四 中的34 osgEarthDrivers engine rex Loader cpp void PagerLoader traverse osg NodeVisitor nv for count 0 count lt merge
  • Java-基于SSM的智能仓储管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 智能仓储系统当然也不能排除在外 智能仓储系统是以实际运用为开发背景 运用软件工程开发方法 采用jsp技术构建的一个管理系统
  • React 项目中添加 react-redux 状态管理

    redux作为一个单独的库 他可以搭配 Angular vue react以及jQuery使用 今天我们再项目中搭配react redux来使用 Redux的核心概念其实很简单 将需要修改的state都存入到store里 发起一个actio
  • java中设计思想及设计原则及设计模式解析

    前言 在java开发过程中 或者各种语言在编程过程中 对基础知识的累计 这其中就会包含java的设计思想及设计原则及设计模式 我们想对当前的架构以及某些功能逻辑进行优化 及繁简 更加适合当前业务的开发 如何让人一看就能懂得代码 以及各种热门
  • 10071 - Back to High School Physics

    Back to High School Physics Time limit 3 000 seconds A partical 电 质点 has inital velocity and accerleration 初速度与加速度 If it
  • SQL6 查找学校是北大的学生信息

    描述 题目 现在运营想要筛选出所有北京大学的学生进行用户调研 请你从用户信息表中取出满足条件的数据 结果返回设备id和学校 示例 user profile id device id gender age university provinc
  • Linux--消息队列

    目录 一 线程和进程的概念 1 线程 2 进程 3 ipcs 二 消息队列代码 写消息 man msgget返回值问题 添加消息队列 man msgsnd 运行代码 运行结果图 进程和消息的状态 三 消息队列代码 读消息 b c读取消息 执