消息队列——The message queue

2024-06-06 00:48
文章标签 message queue 队列 消息

本文主要是介绍消息队列——The message queue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//消息队列:数据通讯
//  点对多,离线通讯。
//  ftok();索取KEY值
//
//  msgget();创建
//  msgctl();删除
//  msgsnd();发送
//  msqrcv();接收
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include "proto.h"

int main()
{
 int msgid; //
 key_t key;
 struct msg_st sbuf;

// 获取消息队列关联的键。 
 key = ftok(KEYPATH,KEYPROJ);
 if(key < 0)
 {
  perror("ftok()");
  exit(1);
 }

//int msgget(key_t key, int msgflg);
//参数msgflg为:消息队列的建立标志和存取权限
 msgid = msgget(key,0);
//success 返回队列标识,failed ,return -1;
 if(msgid < 0)
 {
  perror("msgget()");
  exit(1);
 }
//mtype :从消息队列内读取的消息形态。(0:消息队列中所有消息都会被
//读取)
 sbuf.mtype = 1;  /*!!*/
 strcpy(sbuf.name,"Alan"); 
 sbuf.math = rand()%100;
 sbuf.chinese = rand()%100;
 if(msgsnd(msgid,&sbuf,sizeof(sbuf)-sizeof(long),0) < 0)
 {
  perror("msgsnd");
  exit(1);
 }

 puts("ok!");

 exit(0);
}

----------------------------------------------------------------------------------------------------------------

// 消息队列

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include "proto.h"

int main()
{
 int msgid;
 struct msg_st rbuf;
 key_t key;

 key = ftok(KEYPATH,KEYPROJ);
 if(key < 0)
    {
        perror("ftok()");
        exit(1);
    }

 msgid = msgget(key,IPC_CREAT|0600);
 if(msgid < 0)
 {
  perror("msgget()");
  exit(1);
 }

 while(1)
 {
  if(msgrcv(msgid,&rbuf,sizeof(rbuf)-sizeof(long),0,0) < 0)
  {
   perror("msgrcv()");
   exit(1);
  }
  printf("Name:%s\n",rbuf.name);
  printf("Math:%d\n",rbuf.math);
  printf("Chinese:%d\n",rbuf.chinese);
 }

 msgctl(msgid,IPC_RMID,NULL);


 exit(0);
}

 

--------------------------------------------------------------------------------------------------------

#ifndef PROTO_H__
#define PROTO_H__

#define KEYPATH  "/etc/services"
#define KEYPROJ  'S'

#define NAMESIZE 32

struct msg_st
{
 long mtype;
 char name[NAMESIZE];
 int math;
 int chinese;
};


#endif

 

 


 

这篇关于消息队列——The message queue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1034649

相关文章

vue+elementui--$message提示框被dialog遮罩层挡住问题解决

最近碰到一个先执行this.$message提示内容,然后接着弹出dialog带遮罩层弹框。那么问题来了,message提示框会默认被dialog遮罩层挡住,现在就是要解决这个问题。 由于都是弹框,问题肯定是出在z-index比重问题。由于用$message方式是写在js中而不是写在html中所以不是很好直接去改样式。 不过好在message组件中提供了customClass 属性,我们可以利用

消息认证码解析

1. 什么是消息认证码         消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。         消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。         根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

RabbitMQ实践——临时队列

临时队列是一种自动删除队列。当这个队列被创建后,如果没有消费者监听,则会一直存在,还可以不断向其发布消息。但是一旦的消费者开始监听,然后断开监听后,它就会被自动删除。 新建自动删除队列 我们创建一个名字叫queue.auto.delete的临时队列 绑定 我们直接使用默认交换器,所以不用创建新的交换器,也不用建立绑定关系。 实验 发布消息 我们在后台管理页面的默认交换器下向这个队列

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

剑指offer—编程题7(用两个栈实现一个队列)

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 代码如下: [java]  view plain copy print ? public class Test07 {       /**       * 用两个栈模拟的队列       *

rocketmq问题汇总-如何将特定消息发送至特定queue,消费者从特定queue消费

业务描述 由于业务需要这样一种场景,将消息按照id(业务id)尾号发送到对应的queue中,并启动10个消费者(单jvm,10个消费者组),从对应的queue中集群消费,如下图1所示(假设有两个broker组成的集群):  producer如何实现 producer只需发送消息时调用如下方法即可 /*** 发送有序消息** @param messageMap 消息数据* @param

Spring 集成 RabbitMQ 与其概念,消息持久化,ACK机制

目录 RabbitMQ 概念exchange交换机机制 什么是交换机binding?Direct Exchange交换机Topic Exchange交换机Fanout Exchange交换机Header Exchange交换机RabbitMQ 的 Hello - Demo(springboot实现)RabbitMQ 的 Hello Demo(spring xml实现)RabbitMQ 在生产环境

SpringBoot中如何监听两个不同源的RabbitMQ消息队列

spring-boot如何配置监听两个不同的RabbitMQ 由于前段时间在公司开发过程中碰到了一个问题,需要同时监听两个不同的rabbitMq,但是之前没有同时监听两个RabbitMq的情况,因此在同事的帮助下,成功实现了监听多个MQ。下面我给大家一步一步讲解下,也为自己做个笔记; 详细步骤: 1. application.properties 文件配置: u.rabbitmq.ad

Exception processing async thread queue Exception processing async thread queue

错误信息描述: eclipse 在debug中弹出异常信息框 Exception processing async thread queue Exception processing async thread queue 解决方法: eclipse 中有一个Expressions窗口,里面添加的 expression 没有正确执行,并且没有删除,只要 Remove All Expressio