进程间通信(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://www.mzph.cn/news/673786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 2.2 中文官方教程(八)

训练一个玛丽奥玩游戏的 RL 代理 原文&#xff1a;pytorch.org/tutorials/intermediate/mario_rl_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整的示例代码 作者&#xff1a; 冯元松, Suraj Subramanian, 王浩, 郭宇章。 这个…

谈谈安全对抗的本质

前言 红队和蓝队的兄弟们都辛苦了&#xff0c;趁夜深人静的时候写了一点东西&#xff0c;算是一点心得与体会&#xff0c;谈谈安全对抗的本质&#xff0c;仅供大家参考。 今年的活动&#xff0c;笔者和去年一样&#xff0c;镇守公司&#xff0c;运筹帷幄之中&#xff0c;决胜千…

2/7 算法每日N题(二分+双指针)

第一题&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){int mid (right - left) / 2 left;int num nums[mid];if (num target) {return mid;} else if (num >…

有道论文翻译接口,python版和lua版

论文翻译接口python版 import requests import hashlib from urllib.parse import quotedef get_md5(s,is_hexTrue):md5hashlib.md5()md5.update(s.encode())if is_hex:return md5.hexdigest()return md5.digest()def translate(source_url,from_en,tozh-CHS):params {from: f…

Google DeepMind最新研究,将视觉语言大模型作为强化学习的全新奖励来源

论文题目&#xff1a;Vision-Language Models as a Source of Rewards 论文链接&#xff1a;https://arxiv.org/abs/2312.09187 在大型语言模型&#xff08;LLM&#xff09;不断发展的进程中&#xff0c;强化学习扮演了重要的角色&#xff0c;ChatGPT就是在GPT-3.5的基础上经过…

python将word文件转换成pdf文件

要将word文件转换成pdf文件&#xff0c;可以使用Python的pywin32库结合Microsoft Office软件来实现。 方法一&#xff1a; import win32com.client as win32def word_to_pdf(input_file, output_file):word win32.gencache.EnsureDispatch(Word.Application)doc word.Docume…

上海泗博HART转ModbusTCP网关HME-635应用案例之组态王和超声波液位计通信

如今工业现场的应用也逐渐把现场的不同应用协议转换成以太网&#xff0c;以此来提升现场的通信速度和质量。Modbus TCP是工业以太网协议的一种&#xff0c;也是现场应用中最常使用的。本应用案例是基于Modbus TCP的组态王和基于HART的超声波液位计之间数据通讯的具体应用。 应用…

c#cad 创建-点(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点&#xff0c;并将其添加到模型空间块表记录中。 代码的主要步骤如下&#xff1a; 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…

Java排序方法

在Java中&#xff0c;有多种排序方法可用&#xff0c;其中包括快速排序、归并排序、插入排序等等。Java标准库提供了对数组和集合进行排序的方法。下面是一些常用的Java排序方法的示例&#xff1a; 1. 使用Arrays类中的sort方法对数组进行排序&#xff08;快速排序&#xff09…

【Git版本控制 05】多人协作

目录 一、邀请开发用户 二、新建远程分支 三、拉取远程分支 四、推送远程分支 五、合并远程分支 六、多分支协作 一、邀请开发用户 在windows环境下&#xff0c;再clone同⼀个项⽬仓库&#xff0c;来模拟⼀起协作开发的另⼀名⼩伙伴。 际开发中&#xff0c;每个⽤⼾都有…

Redis持久化-fsync策略

在Redis中&#xff0c;fsync 策略用于控制何时将数据同步到磁盘上。这是持久化功能的一部分&#xff0c;它确保即使在发生意外关闭或崩溃时&#xff0c;Redis的数据也不会丢失。 有三种主要的 fsync 策略&#xff1a; no&#xff08;默认&#xff09;&#xff1a; Redis不会主…

vue的8大生命周期

第072个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使用&#xff0c;computed&a…

npm_config_xxx

// package.json{ "scripts": { "log": "node index.js", } }// index.js function logProcessEnv(key){ console.log(process.env[${key}], process.env[key]); } logProcessEnv(npm_config_foo); 问题&#xff1a; npm run log 和 yarn log…

sui move笔记

前言 一些疑问: sui 和move是什么关系&#xff1f; 基础 基本数据类型 Move 的基本数据类型包括: 整型 (u8, u32,u64, u128,u258)、布尔型 boolean 和地址 address。 Move 不支持字符串和浮点数。 _u8&#xff1a;代表8位无符号整数类型&#xff0c;范围是0~255。占用内存…

【Python】虚拟环境miniconda安装(python3.7, python3.x)

背景 使用Python开发项目时&#xff0c;我们一般都需要安装环境&#xff0c;可能是在物理机上直接安装&#xff0c;也可能是在虚拟环境上安装&#xff0c;当前是怎么按照conda环境的示例&#xff0c;可以指定安装Python3.x的所有版本。 安装 首先&#xff0c;需要登录当前的…

深入对比:java中Synchronized关键字和ReentrantLock锁的终极对决

Synchronized和ReentrantLock在Java中都是用来控制并发访问共享资源的机制&#xff0c;但它们在获取释放锁的方式、锁的特性以及锁的实现级别等方面存在一些差异。 锁的特性 synchronized是Java的关键字&#xff0c;可以隐式地获取和释放锁。synchronized关键字通过内置的锁机…

vue百度地图的和element输入框/v-region的联动

vue百度地图的使用 第一步&#xff1a;安装插件第二步&#xff1a;main.js中引用第三步&#xff1a;页面中使用 第一步&#xff1a;安装插件 npm install vue-baidu-map --save第二步&#xff1a;main.js中引用 // 百度地图 import BaiduMap from vue-baidu-map Vue.use(Baid…

微信小程序(三十九)表单信息收集

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.表单收集的基本方法 2.picker的不足及解决方法 源码&#xff1a; index.wxml <!-- 用户信息 --> <view class"register"><!-- 绑定表单信息收集事件--><form bindsubmit"…

计算两个数相除后的余数返回值为浮点型math.fmod(x, y)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算两个数相除后的余数 返回值为浮点型 math.fmod(x, y) [太阳]选择题 请问以下代码执行math.fmod()后输出的结果是&#xff1f; import math print("【执行】math.fmod(10, 4)"…

sql查询大小写问题

IN() 函数大小敏感判断 如果你在使用 MySQL 的 IN() 函数时发现大小写不敏感&#xff0c;那可能是由于你的 MySQL 数据库的配置设置了大小写不敏感的规则。 这通常是由 lower_case_table_names 参数引起的。在 MySQL 中&#xff0c;这个参数决定了数据库系统在存储和比较表名…