13-LINUX--消息队列

embedded/2024/10/31 5:36:39/

一.消息队列

1.消息队列:消息队列为一个进程向另一个进程发送一个数据块提供了条件,每个数据块会包含一个类型。

2.相关函数

 1>.msgget(key_t key,int msgflg) : 创建消息队列

 2>. msgsnd:把消息添加到消息队列 

 3>.msgrcv :从一个消息队列中获取信息

3.代码示例

 #include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>/*msgget()创建或者获取一个消息队列msgget()成功返回消息队列 ID,失败返回-1msqflg: IPC_CREAT*/int msgget(key_t key, int msqflg); /*msgsnd()发送一条消息,消息结构为:struct msgbuf{long mtype; // 消息类型, 必须大于 0char mtext[1]; // 消息数据};msgsnd()成功返回 0, 失败返回-1msqsz: 指定 mtext 中有效数据的长度msqflg:一般设置为 0 可以设置 IPC_NOWAIT*/int msgsnd(int msqid, const void *msqp, size_t msqsz, int msqflg); /*msgrcv()接收一条消息msgrcv()成功返回 mtext 中接收到的数据长度, 失败返回-1msqtyp: 指定接收的消息类型,类型可以为 0msqflg: 一般设置为 0 可以设置 IPC_NOWAIT*/ssize_t msgrcv(int msqid, void *msgp, size_t msqsz, long msqtyp, int msqflg); /*msgctl()控制消息队列msgctl()成功返回 0,失败返回-1cmd: IPC_RMID*/int msgctl(int msqid, int cmd, struct msqid_ds *buf);

a.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/msg.h>struct mess
{long type;char buff[128];
};int main()
{int msgid = msgget((key_t)1234,IPC_CREAT|0600);if(msgid == -1){exit(0);}struct mess m;m.type = 2;char s[128] = {0};printf("input:  ");fgets(s,128,stdin);strcpy(m.buff,s);msgsnd(msgid,&m,128,0);//添加数据       exit(0);
}

b.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/msg.h>struct mess
{long type;char buff[128];
};int main()
{int msgid = msgget((key_t)1234,IPC_CREAT|0600);if(msgid == -1){exit(0);}struct mess m;msgrcv(msgid,&m,128,2,0);printf("read msg =%s\n",m.buff);exit(0);
}


http://www.ppmy.cn/embedded/9359.html

相关文章

如何利用R语言获取worldclim30s的气候数据

要使用R语言获取WorldClim30s的气候数据&#xff0c;你可以使用raster包来处理栅格数据&#xff0c;而且getData()函数可以方便地从WorldClim网站下载数据。以下是一个获取WorldClim30s数据的基本步骤&#xff1a; 安装和加载必要的包&#xff1a; 在R中&#xff0c;首先要确保…

Web前端-Vue

黑马程序员JavaWeb开发教程 文章目录 一、什么是Vue1、Vue概念2、Vue快速入门&#xff08;1&#xff09;快速入门&#xff08;2&#xff09;插值表达式 三、Vue常用指令1、常用指令2、指令使用详解&#xff08;1&#xff09;v-bind&#xff08;2&#xff09;v-model&#xff08…

面试十八、容器适配器

容器适配器是一种特殊类型的容器&#xff0c;它们提供了一种不同于常规容器的接口和行为。容器适配器通常是建立在其他容器之上&#xff0c;通过改变接口或添加限制来满足特定的需求或解决特定的问题。 在 C 中&#xff0c;标准库提供了三种常见的容器适配器&#xff1a; 栈&am…

解决宝塔面板无法访问(无法访问或拒绝链接)

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;Linux ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 问题如下&#xff1a; 本人设置了授权IP&#xff0c;但是有些问题&#xff0c;所以是打算取消授权IP 重…

轮转数组(Leedcode)的题目

题目&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步…

如何查看Debian Linux的内核版本

2024年4月19日&#xff0c;周五上午 uname -r

HBuilder如何发布前端H5应用

目录 一、点击菜单 “发行” -> “网站-PC Web或手机H5...”二、输入网站标题和网站域名&#xff0c;点击【发行】按钮三、创建应用1.登录 DCLOUD 开发者中心2.点击【创建应用】按钮&#xff0c;进入创建应用页面3.应用类型选uni-app&#xff0c;输入应用名称、应用描述后提…

笨蛋学C++【C++基础第四弹】

C基础第四弹 11.C日期&时间12.C基本的输入输出12.1I/O库头文件12.2标准输出流&#xff08;cout&#xff09;12.3标准输入流&#xff08;cin&#xff09;12.4标准错误流&#xff08;cerr&#xff09;12.5标准日志流&#xff08;clog&#xff09; 13.C结构体13.1访问结构体成…