自测之Lesson11:消息和消息队列
题目:key及ftok函数的作用。
解答:
key是用来创建消息队列的一个参数,当两个key相同时,创建消息队列会引起“误会”(除非有意为之)。所以我们可以通过ftok函数来获得一个“不易重复”的key。
key对于进程间通信也有帮助,当一进程知晓另一进程创建消息队列所用的key后,便可以使用该key访问该消息队列。
题目:编写一个可以向消息队列发送消息和接收消息的程序。
实现代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>struct msgbuf { // msgbuf结构体long mtype;char mtext[1024];
};void TestMsgSend(int msqid)
{while(1) {long msgType;struct msgbuf msg;fprintf(stderr, "Send[FORMAT:type msg]:");scanf("%ld%s", &msgType, msg.mtext);msg.mtype = msgType;int iRet = msgsnd(msqid, &msg, strlen(msg.mtext), 0); if (iRet == -1) {perror("fail msgsnd");return;} }
}void TestMsgRecv(int msqid)
{struct msgbuf msg;long msgType;while (1) {fprintf(stderr, "Recv[FORMAT:type]:");scanf("%ld", &msgType);memset(msg.mtext, 0, 1024);msg.mtype = msgType;int iRet = msgrcv(msqid, &msg, 1024, msg.mtype, 0);if (iRet < 0) {perror ("fail magrcv");return;}printf("Recv:%s\n", msg.mtext);}}int main(int argc, char **argv)
{if (argc != 2 ||(strcmp(argv[1], "r") && strcmp(argv[1], "s"))){printf("Usage: %s [ r | s ]\n", argv[0]);printf("\t r:receive message queue\n");printf("\t s:send message queue\n");return 0;}key_t key;key = ftok("test1", 1); // 创建keyif (key == -1) {perror("fail ftok");return -1;}int msqid;msqid = msgget(key, IPC_CREAT | 0664); // 创建消息队列if (msqid == -1) {perror("fail msgget");return -1;}if (argv[1][0] == 's') { // 进程1向消息队列发送消息TestMsgSend(msqid);}else if (argv[1][0] == 'r') { // 进程2从消息队列读取消息TestMsgRecv(msqid);}return 0;
}
转载于:https://www.cnblogs.com/xzxl/p/8542194.html
自测之Lesson11:消息和消息队列相关推荐
- 消息队列面试连环问:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?...
大家好,我是 yes. 最近我一直扎在消息队列实现细节之中无法自拔,已经写了 3 篇Kafka源码分析,还剩很多没肝完.之前还存着RocketMQ源码分析还没整理.今儿暂时先跳出来盘一盘大方向上的消息 ...
- arouter跨module传递消息_消息队列中间件(二)使用 ActiveMQ
ActiveMQ 介绍 Active MQ 是由 Apache 出品的一款流行的功能强大的开源消息中间件,它速度快,支持跨语言的客户端,具有易于使用的企业集成模式和许多的高级功能,同时完全支持 JSM ...
- vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ
为什么要使用MQ消息中间件?它解决了什么问题?关于为什么要使用消息中间件?消息中间件是如何做到同步变异步.流量削锋.应用解耦的?网上已经有很多说明,我这里就不再说明.我在接下来的RabbitMq系列博 ...
- java 如何判定消息已在队列_Java面试—消息队列
消息队列面试题 题目来自于中华石杉,解决方案根据自己的思路来总结而得.题目主要如下: 1. 为什么要引入消息队列? 消息队列的引入可以解决3个核心问题: 解耦 异步 削峰 解耦 在一个项目中,如果一个 ...
- videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?
点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的 ...
- 操作系统-消息,消息队列
消息,消息队列 1. 消息 在windows 程序中,消息是由MSG 结构体来表示的.MSG 结构体的定义如下: typedef struct tagMSG {HWND hwnd;UINT messa ...
- ActiveMQ消息持久化_队列_7
消息持久话 一 . 持久化 1.1 非持久 messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT) 非持久化:当服务器宕机,消息不存 ...
- RabbitMQ fanout广播消息使用匿名队列
场景 我们希望发送的消息被所有绑定到这个交换机的所有队列消费到,那么我们通常会用到fanout类型的交换机, 但我们又不想固定队列名称,那么就需要随机的队列名称,RabbitMQ中的Anonymous ...
- 消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务
点击下方"Java编程鸭"关注并标星 更多精彩 第一时间直达 一.如何确保消息不丢失? 1.检测消息丢失的方法 可以利用消息队列的有序性来验证是否有消息丢失.在Producer端给 ...
- windows消息和消息队列详解
windows消息和消息队列 与基于MS - DOS的应用程序不同,Windows的应用程序是事件(消息)驱动的.它们不会显式地调用函数(如C运行时库调用)来获取输入,而是等待windows向它们传 ...
最新文章
- python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
- iOS应用:成功就像中彩票,大半开发者亏本
- 虚拟化服务器端口用万兆,万兆以太网部署需要注意的方面有哪些
- 【SICP练习】79 练习2.51
- 《金色梦乡》金句摘抄(二)
- [react] 在React中怎么阻止事件的默认行为?
- IntelliJ IDEA如何build path
- 自从有了这样的可视化报表,我们社区再没有过疫情(内含福利)
- Android基础知识点的整理3
- 强制停用华为桌面,换第三方桌面
- ajax性能测试脚本,mqtt性能测试工具
- Python一行代码实现ADF检验(时间序列平稳性检验)(包含结果解读)
- android耳机检测驱动,[RK3288][Android6.0] 有线耳机驱动小结
- STAR法则修改简历
- 服务器端返回的状态码是什么意思
- 企业金融App评测系列——微众银行以App构筑企业金融服务新生态,成为企业的随身数字银行
- Iterator 的用法
- PMP考试一定要报培训班吗?
- Windows Presentation Foundation 巡游
- STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换