进程间通信(4):消息队列

先进先出,保证信息的有序性。

函数:msgget(搭配ftok)、msgsnd、msgrcv、msgctl

实现流程:

1、创建消息队列IPC对象 msgget

2、通信(内置函数:msgsnd、msgrcv)

3、删除消息队列IPC对象 msgctl

write.c

/*===============================================
*   文件名称:write.c
*   创 建 者:cxy     
*   创建日期:2024年02月07日
*   描    述:
================================================*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>typedef struct msgbuf{   long type;       //区分通信的队列char data[100];  //通信内容
}MSG;int main(int argc, char *argv[])
{//1、创建消息队列IPC对象msgget//1.1 获取key值key_t key = ftok("/home",5);//1.2 创建消息队列IPC对象//获取消息队列ID号int msgid = msgget(key,IPC_CREAT|0664);//2、通信msgsndMSG msg_1 = {1,"hahaha"};    //队列1MSG msg_2 = {2,"heiheihei"}; //队列2MSG msg_3 = {3,"xixixi"};    //队列3MSG msg_4 = {1,"----hahaha----"};    //队列1msgsnd(msgid,&msg_1,sizeof(msg_1)-sizeof(long),0);   //通信内容大小、权限可读可写msgsnd(msgid,&msg_2,sizeof(msg_2)-sizeof(long),0);msgsnd(msgid,&msg_3,sizeof(msg_3)-sizeof(long),0);msgsnd(msgid,&msg_4,sizeof(msg_4)-sizeof(long),0);//3、删除消息队列IPC对象msgctlmsgctl(msgid,IPC_RMID,NULL);return 0;
} 

read.c

/*===============================================
*   文件名称:read.c
*   创 建 者:cxy     
*   创建日期:2024年02月07日
*   描    述:
================================================*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>typedef struct msgbuf{   long type;       //区分通信的队列char data[100];  //通信内容
}MSG;int main(int argc, char *argv[])
{//1、创建消息队列IPC对象msgget//1.1 获取key值key_t key = ftok("/home",5);//1.2 创建消息队列IPC对象//获取消息队列ID号int msgid = msgget(key,IPC_CREAT|0664);//2、通信msgrcvMSG mymsg_1;MSG mymsg_2;MSG mymsg_3;MSG mymsg_4;msgrcv(msgid,&mymsg_1,sizeof(MSG)-sizeof(long),3,0);   //mymsg_1存储队列3信息msgrcv(msgid,&mymsg_2,sizeof(MSG)-sizeof(long),2,0);   //mymsg_2存储队列2信息msgrcv(msgid,&mymsg_3,sizeof(MSG)-sizeof(long),1,0);   //mymsg_3存储队列1信息msgrcv(msgid,&mymsg_4,sizeof(MSG)-sizeof(long),1,0);   //mymsg_4存储队列1信息printf("%s\n",mymsg_1.data);printf("%s\n",mymsg_2.data);//按照发送顺序打印队列1中信息printf("%s\n",mymsg_3.data);printf("%s\n",mymsg_4.data);//3、删除消息队列IPC对象msgctlmsgctl(msgid,IPC_RMID,NULL);return 0;
} 

结果:队列1证明了消息的有序性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774994.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数字图像处理实验记录九(数字形态学实验)

一、基础知识 1.形态学&#xff0c;用于从图像中提取对表达和描绘区域形状有意义的图像分量&#xff0c;使后续的识别工作能够抓住目标对象最为有本质的形状特征&#xff0c;如边界连通区域等。 2.膨胀运算&#xff1a;膨胀会使目标区域范围“变大”&#xff0c;将于目标区域接…

第三百一十五回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容…

C语言指针函数学习2

之前写过一篇指针函数的博文&#xff1b;复习再学习一下&#xff1b; 指针函数&#xff0c;是一个函数&#xff0c;它的返回值是指针类型&#xff1b; 之前写了一个指针函数&#xff0c;返回一个 int * 类型的指针&#xff1b;下面做一个程序&#xff0c;返回一个结构体指针&a…

如何给闲置电脑安装黑群晖

准备 diskgenius &#xff0c;黑群晖引导文件&#xff08;有些需要扩展驱动包&#xff09;&#xff0c;如果给U盘安装需要balenaEtcher或者rufus&#xff08;U盘安装还需要ChipGenus&#xff09;&#xff0c;如果给硬盘安装需要有pe推荐firePE或U启通 我以U盘为例 首先去找这…

【声明】关于抄袭我博客的声明

最近发现有人在抄袭我的博客&#xff0c;你抄了就算了&#xff0c;你连原链接也不贴&#xff0c;直接就设置的是原创的&#xff0c;你脸去哪了啊&#xff1f; 在你评论下面说了两次还在抄&#xff0c;事不过三&#xff0c;今天早上发现你又抄了一篇。既然如此&#xff0c;我就…

面向智算服务,构建可观测体系最佳实践

作者&#xff1a;蓟北 构建面向 AI、大数据、容器的可观测体系 &#xff08;一&#xff09;智算服务可观测概况 对于越来越火爆的人工智能领域来说&#xff0c;MLOps 是解决这一领域的系统工程&#xff0c;它结合了所有与机器学习相关的任务和流程&#xff0c;从数据管理、建…

前端JavaScript篇之对执行上下文的理解

目录 对执行上下文的理解创建执行上下文 对执行上下文的理解 当我们在执行JavaScript代码时&#xff0c;JavaScript引擎会创建并维护一个执行上下文栈来管理执行上下文。执行上下文有三种类型&#xff1a;全局执行上下文、函数执行上下文和eval函数执行上下文。 在写代码的时…

代码随想录算法训练营第二十五天 |216.组合总和III,17.电话号码的字母组合(已补充)

剪枝操作讲解&#xff1a;&#xff08;已观看&#xff09; 带你学透回溯算法-组合问题的剪枝操作&#xff08;对应力扣题目&#xff1a;77.组合&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 216.组合总和III&#xff08;已观看&#xff09; 1、题目链接&#xf…

参观宋代建筑,感受传统魅力

为了更好地了解和传承中华文化&#xff0c;同时深入挖掘其在现代社会的传承与发展&#xff0c;2024年2月8日&#xff0c;曲阜师范大学计算机学院“古韵新声&#xff0c;格物致‘知’”社会实践队队员饶子恒深入考察中国传统建筑和文化&#xff0c;前往山东省菏泽市郓城县的水浒…

【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例&#xff1a;UDF状态初始化 在TaskManager中启动Task线程后&#xff0c;会调用StreamTask.invoke()方法触发当前Task中算子的执行&#xff0c;在…

SolidWorks学习笔记——草图绘制的基本命令

目录 一、进入草图绘制 二、直线命令与删除命令 三、圆弧命令与矩形命令 四、槽口命令以及多边形命令 五、椭圆以及倒角命令 六。草图绘制中的剪裁命令 七、草图中的几何关系 八、草图绘制中的智能尺寸 九、从外部粘贴草图&#xff08;CAD&#xff09; 一、进入草图绘…

ongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

Swagger是什么&#xff1f; Swagger是一个规范且完整API文档管理框架&#xff0c;可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就…

Linux系统中HTTP代理的常见问题及解决方案

亲爱的Linux用户们&#xff0c;是不是有时候觉得HTTP代理就像是一个魔法盒子&#xff0c;让你在数字世界中自由穿梭&#xff1f;但是&#xff0c;就像所有的魔法物品一样&#xff0c;它也会偶尔出点小状况。今天&#xff0c;我们就来一起探讨一下Linux系统中HTTP代理的常见问题…

MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置

MyBatis之环境搭建以及实现增删改查 前言实现步骤1. 编写MyBatis-config.xml配置文件2. 编写Mapper.xml文件&#xff08;增删改查SQL文&#xff09;3. 定义PeronMapper接口4. 编写测试类1. 执行步骤2. 代码实例3. 运行log 开发环境构造图总结 前言 上一篇文章&#xff0c;我们…

Excel——合并计算

1.表格的合并计算&#xff08;单张表格/多个表格&#xff09; Q&#xff1a;请统计两个表格中各商品的总销量和总销售额&#xff0c;将结果放置在下方任意位置。 A&#xff1a;选择一个需要将合并计算数据放置区域的空白单元格 选择【数据】——【合并计算】&#xff0c;【函…

【Spring】Tomcat服务器部署

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 单体项目部署 本地工作 项目在本地开发完毕之后进行一些必要参数的修改。 比如&#xff1a; 数据库的JDBC的配置文件&#xff0c;还有前端页面的…

STM32学习笔记——定时器

目录 一、定时器功能概述 1、基本定时器&#xff08;TIM6&TIM7&#xff09; 工作原理 时序 2、通用计时器&#xff08;TIM2&TIM3&TIM4&TIM5&#xff09; 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…

打开word时,启动时间很长,教你一招快速启动!

在打开word时&#xff0c;是不是发现word突然启动的非常慢&#xff0c;要在加载界面加载很长时间才能进去&#xff0c;但感觉不是自己电脑的问题&#xff0c;因为其他office软件运行正常。关闭这些设置可以快速启动word。 解决方法 ①在菜单中的“文件”&#xff0c;点击“选项…

ONLYOFFICE 文档开发者版 8.0:API和文档生成器更新

随着 8.0 版新功能的发布&#xff0c;我们更新了编辑器、文档生成器和插件的 API。请阅读本文了解详情。 PDF 支持 我们在 documentType 参数中添加了 pdf 文档这一类型。现在完全支持PDF文件*&#xff0c;包括含有可填写字段的文件&#xff0c;并且可以在ONLYOFFICE PDF 编辑…

Transformer实战-系列教程6:Vision Transformer 源码解读4

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 Vision Transformer 源码解读1 Vision Transformer 源码解读2 Vision Transformer 源码解读3 Vis…