当前位置: 首页 > news >正文

Linux 内核 (十二)进程间通讯 之 消息队列

前言

这个系列的上一篇介绍了进程间通讯关于管道相关的内容及代码实例,本章要介绍关于消息队列相关的内容.

消息队列交互图示

函数原型

#include <sys/msg.h>
#include <sys/ipc.h>
//创建 or 打开队列 成功返回队列ID,失败返回-1
int msgget(key_t key,int flag);
//创建新队列的条件:没有与键值key相对应的消息队列,且flag中含有IPC_CREAT的标志位
//or key参数为IPC_PRIVATE//添加消息:成功返回 0,失败返回-1
int msgsnd (int msqid,const void *ptr,size_t size,int flag);//读取消息:成功返回 消息数据的长度,失败返回-1
int msgrcv(int msqid,void *ptr,size_t size,long type,int flag);//控制消息队列:成功返回 0,失败返回-1
int msgctl(int msqid,int cmd,struct msqid_ds *buf);

消息队列api函数应用

msgGet.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>struct msgBuf
{long mtype;char mtext[128];
};int main(){struct msgBuf sendBuf = {888,"msg from que pjy "};int msgID = msgget(0x1234,IPC_CREAT|0777);if(msgID == -1){printf("get que failure\n");}msgsnd(msgID,&sendBuf,strlen(sendBuf.mtext),0);return 0;}

msgSend.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>struct msgBuf
{long mtype;char mtext[128];
};int main(){struct msgBuf readBuf;//获取队列int msgID = msgget(0x1234,IPC_CREAT|0777);if(msgID == -1){printf("get que failure !\n");}msgrcv(msgID,&readBuf,sizeof(readBuf.mtext),888,0);printf("read from que: %s \n",readBuf.mtext);return 0;}

运行结果展示

相关文章:

  • 深入掌握SystemVerilog验证:《SystemVerilog验证 测试平台编写指南》(可下载)
  • 巴中青少年编程:开启未来科技的无限可能
  • Science Online《科学周刊》文献在家如何查找下载
  • 针对k8s集群已经加入集群的服务器进行驱逐
  • OpenSSL新手教程:加密与安全通信基础
  • Hadoop 3.X HA集群部署
  • Vue页面生成PDF后调起浏览器打印
  • 基于Pytorch实现AI写藏头诗
  • JWT工具【工具类】
  • cdh zookeeper报错 Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。
  • C++智能指针举例
  • LabVIEW与Python的比较及联合开发
  • 编程机器人的参数表怎么看
  • 【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题
  • 【数学】什么是方法矩估计?和最大似然估计是什么关系?
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 11111111
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • docker-consul
  • eclipse的离线汉化
  • Flannel解读
  • flask接收请求并推入栈
  • hadoop集群管理系统搭建规划说明
  • JavaScript标准库系列——Math对象和Date对象(二)
  • miaov-React 最佳入门
  • Python十分钟制作属于你自己的个性logo
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 对象引论
  • 解决iview多表头动态更改列元素发生的错误
  • 老板让我十分钟上手nx-admin
  • 那些被忽略的 JavaScript 数组方法细节
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信小程序填坑清单
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 大数据全解:定义、价值及挑战
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (函数)颠倒字符串顺序(C语言)
  • (黑马C++)L06 重载与继承
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)【Hibernate总结系列】使用举例
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)重识new
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .gitattributes 文件
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net程序集学习心得