消息队列

原创 2012年03月27日 12:40:57

消息队列就是消息的一个链表,它允许一个或多个进程向它写消息,一个或多个进程从中读消息。具有一定的FIFO的特性,但是可实现消息的随即查询。这些消息存在于内核中,由“队列ID”来标识。

消息队列的实现包括创建和打开队列、添加消息、读取消息和控制消息队列这四种操作。

msgget:创建和打开队列,其消息数量受系统限制。

 int msgget (key_t key, int flag)

   key:返回新的或已有队列的IDIPC_PRIVATE

 

msgsnd:添加消息,将消息添加到消息队列尾部。

 int msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int flag)

  msqid是消息队列的队列ID

 msgp是消息内容所在的缓冲区;

 msgsz是消息的大小;

 msgflg是标志,IPC_NOWAIT若消息并没有立交发送而调用进程会立即返回。

 struct msgbuf

    {

         long mtype; /* type of message */

   char mtext[1]; /* message text */

};

 

msgrcv:读取消息,从消息队列中取走消息。

 int msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz,long msgtyp, int flag)

  msqid是消息队列的引用标识符;

 msgp是接收到的消息将要存放的缓冲区;

 msgsz是消息的大小;

 msgtyp是期望接收的消息类型;

 msgflg是标志。

 

msgctl:控制消息队列。

 int msgctl (int msqid, int cmd, struct msqid_ds *buf)

  msqid是消息队列的引用标识符;

  cmd是执行命令;

  buf是一个缓冲区。

cmd参数指定对于由msqid规定的队列要执行的命令:

n IPC_STAT取此队列的msqid_ds结构,并将其存放在buf指向的结构中。

n IPC_SET按由buf指向的结构中的值,设置与此队列相关的结构中的下列四个字段:msg_perm.uidmsg_perm.gid、msg_perm;modemsg_qbytes。此命令只能由下列两种进程执行:一种是其有效用户ID等于msg_perm.cuidmsg_perm.uid;另一种是具有超级用户特权的进程。只有超级用户才能增加msg_qbytes的值。

n IPC_RMID从系统中删除该消息队列以及仍在该队列上的所有数据。这种删除立即生效。仍在使用这一消息队列的其他进程在它们下一次试图对此队列进行操作时,将出错返回EIDRM

 

例:设计两个程序,要求用消息队列实现聊天程序。增加结束字符,比如最后输入“end”后结束进程。设消息队列的key为1234。

send.c文件

server.c文件

运行结果:

Winddows 消息队列原理和编程实例

原文链接:http://www.vckbase.com/index.php/wv/1593 在Cstore中,客户端程序中各线程间的通信机制采用的是windows消息队列。 本文主要包括以下内...
  • wangxiaoqin00007
  • wangxiaoqin00007
  • 2013年11月14日 10:32
  • 4076

Linux系统下-进程间通信(消息队列-详解)

Linux下,进程间通信方式: #(1)管道(Pipe)及有名管道(named pipe): #(2)信号量: #(3)共享内存: #(4)消息队列: #(5)套接口(Socket) #(6)信号(S...
  • sty23122555
  • sty23122555
  • 2016年04月12日 12:31
  • 8199

消息队列Java的简单实现

今天看到我们的招牌信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。 我可以举个小例子先说明应用场景 假设你的服务器每分钟的处理量为200个,但客户端再峰值的时候可能一分钟会发1000个消息给...
  • u012260707
  • u012260707
  • 2016年01月07日 15:07
  • 25745

Linux共享内存与消息队列

  • 2017年12月18日 16:53
  • 1.18MB
  • 下载

使用org.eclipse.paho.client.mqttv3实现mqtt 消息队列

  • 2017年12月15日 18:25
  • 7KB
  • 下载

mosquitto消息队列 win64位程序编译库(已包含ssl模块)

  • 2018年01月06日 13:52
  • 1.67MB
  • 下载

java-消息队列Rabbit各种模式测试用例

  • 2017年12月22日 16:22
  • 48KB
  • 下载

RocketMQ消息队列demo

  • 2018年01月09日 17:36
  • 8KB
  • 下载

RabbitMQ实战_高效部署分布式消息队列

  • 2017年12月22日 09:53
  • 93.17MB
  • 下载

RabbitMQ实战:高效部署分布式消息队列 pdf版

  • 2017年11月30日 16:16
  • 77.39MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:消息队列
举报原因:
原因补充:

(最多只允许输入30个字)