消息队列编程

消息队列:就是一个消息的链表。而一条消息则可看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息

发送消息队列:

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

struct msgt
{
long msgtype;
char msgtext[1024];

};
int msg_type;
char str[256];
struct msgt msgs;
void main()
{
int msqid;

//创建消息类型
msqid= msgget(1024, IPC_CREAT);

while(1)
{
printf("please input message type,0 for quit!");
//获取消息类型
scanf("%d",&msg_type);

//如果发送消息类型为0,退出循环
if(msg_type==0)
break;

//获取消息
printf("please input message content\n");
scanf("%s",&str);

msgs.msgtype=msg_type;
strcpy(msg.msgtext,str);

//发送消息

msgsnd( msqid, &msgs,sizeof(struct msgt), 0);

}

//删除消息队列

msgctl( msqid, IPC_RMID, 0)

}

接收消息队列:

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

int msqid=0;
struct msgt
{
long msgtype;
char msgtext[1024];

};

void childprocess()
{
struct msgt msgs;

while(1)

{
//接收消息队列
msgrcv( msqid, &msgs,sizeof(struct msgt),0,0);

//打印消息队列中的数据
printf("msg text: %s\n",msgs.msgtext);

}
return;
}

void main()
{

int i;
//打开消息队列
msqid= msgget(1024, IPC_CREAT);

//创建3个子进程,处理速度加快3个进程同时处理
for(i=o;i<3;i++)
{
cpid=fork();
if(cpid<0)
printf("creat child process error\n");
else if(cpid==0)
childprocess();
}
}

时间: 2024-12-29 10:26:24

消息队列编程的相关文章

Linux 消息队列编程

消息队列.信号量以及共享内存被称作 XSI IPC,它们均来自system V的IPC功能,因此具有许多共性. 键和标识符: 内核中的每一种IPC结构(比如信号量.消息队列.共享内存)都用一个非负整数的标识符加以标示(如共享内存的shmid.信号量的semid.以及消息队列的msgid).不同于文件描述符,IPC标识符不是一个小的非负整数,它是一个int型的整数,当一个标识符被创建,以后又被删除时,这个整数持续加1,达到整型的最大值后,重新回到0. 但是每一个IPC对象在内核中的标识符只能在内部

LInux进程间通信之消息队列编程实例

本文主要通过消息队列的编程实例来加深对消息队列的理解. 一.消息队列之创建 创建一个消息队列,需要用到一个函数: #include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int msgget(key_t key,int msgflg); key:需要调用ftok函数来获取. msgflg:IPC_CREAT,不存在则创建,存在则返回已有的qid. IPC_CREAT|IPC_EXCL,不存在则创建,存在

嵌入式 Linux进程间通信(七)——消息队列

嵌入式 Linux进程间通信(七)--消息队列 一.消息队列 消息队列用于同一台机器上的进程间通信,是一个在系统内核中用来保存消息的队列,在系统内核中是以消息链表的形式出现.消息链表中节点的结构用msg声明.消息队列是一种从一个进程向另一个进程发送数据块的方法. 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.消息队列可以避免命名管道的同步和阻塞问题,但是每个数据块都有一个最大长度的限制. 1.msgget函数 #include <sys/types.h> #in

ZWave 中的消息队列机制

文章主题   在我们的日常编程中,对消息队列的需求非常常见,使用一个简洁.高效的消息队列编程模型,对于代码逻辑的清晰性,对于事件处理的高效率来说,是非常重要的.这篇文章就来看看 ZWave 中是通过什么机制为我们提供了一个便捷的消息队列处理机制. 内容导航   消息队列是什么 我自己写的消息队列 ZWave 消息队列的结构 ZWave 消息队列的使用(初始化.存储消息.取出消息) 消息队列是什么   消息队列最主要特点是:存储消息,先进先出. 比如在典型的生产者-消费者编程模型中,先创建一个消息

【进程编程】——msg进程间的消息队列通信

           [进程编程]--msg进程间的消息队列通信 消息队列就像一个链表,先进先出,就像排队打饭,先到先买!键值 用来获取消息队列的描述字,我感觉就像是一个定位标识符! 函数一     key_t ftok(char *pathname,char proj)返回的是一个键值------>创建队列之前一定要获取这个键值!proj:项目名,不为零即可 打开.创建函数二     int msgget(key_t key,int msgflg) //看见没,这里是要求键值的. key:键值

Linux系统编程——进程间通信:消息队列

消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法,其特点如下: 1)消息队列可以实现消息的随机查询.消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取. 2)消息队列允许一个或多个进程向它写入或者读取消息. 3)与无名管道.命名管道一样,从消息队列中读出消息,消息队列中对应的数据都会被删除. 4)每个消息队列都有消息队列标识符,消息队列的标识符在整个系统中是唯一的. 5)消息队列是消息的链表,存放在内存中,由内核维护.只有内核重启或人工删除消息队列时,该消息队列才会被删

PHP高级编程之消息队列

PHP高级编程之消息队列 http://netkiller.github.io/journal/php.mq.html Mr. Neo Chen (陈景峰), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 29812080 <[email protected]> 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明. 文档出处: http://netkiller.github.i

PHP 高级编程之多线程-消息队列

Home  |  Mirror  |  Search  |  杂文  |  ITEYE 博客  |  OSChina 博客  |  51CTO 博客  |  Linkedin PHP 高级编程之多线程 http://netkiller.github.io/journal/thread.php.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 29812080

【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通信,在一个进程之中,只能单一的对其写或者是读,而不可以及执行写操作又执行读操作.这一点,我们可以将其想象成我们的水管,分别连着不同的两端,在有水流的时候,一端只能进行输入,另一端只能进行输出,而不可以同时输入和输出. 管道又分为有名管道和匿名管道,两者的区别在于对于匿名管道,其只能在具有亲缘关系的父