消息队列
2011-11-24 14:41
176 查看
消息队列
A 和 B 是 相对独立的两支程序,现在 A 传送 10 个Student 到 B
B 将Student 读取出来,显示在界面上
然后 B 传送 10 个 Teacher 到 A ,A 显示 teacher 在界面上
#include "public.h"
typedef struct students
{
long mtype;
int no;
char username[100];
}*StusNode,SNode;
int main()
{
int ret=-1;
int msg_flags,msg_id;
key_t key;
struct msqid_ds msg_info;
SNode msg_mbuf[10],msg_mbufs[10];
for (int t=0;t<10;t++)
{
msg_mbuf[t].mtype=10;
msg_mbuf[t].no=t;
strcpy(msg_mbuf[t].username,"students");
}
int msg_sflags,msg_rflags;
char *msgpath="/ipc/msg/";
key=ftok(msgpath,'b');
if (key!=-1)
{
printf("成功创建KEY\n");
}
else
{
printf("建立KEY失败\n");
}
msg_flags=IPC_CREAT|IPC_EXCL;
msg_id=msgget(key,msg_flags|0x0666);
if (-1==msg_id)
{
printf("消息建立失败\n");
return 0;
}
msg_sflags=IPC_NOWAIT;
//msg_mbuf.mtypes=10;
for (int t=0;t<10;t++)
{
int len = sizeof(SNode)-sizeof(long);
ret=msgsnd(msg_id,&msg_mbuf[t],len,msg_sflags);
if (-1==ret)
{
printf("发送消息失败\n");
}
else
printf("发送成功\n");
}
msg_rflags=IPC_NOWAIT|MSG_NOERROR;
for (int t=0;t<10;t++)
{
int len = sizeof(SNode)-sizeof(long);
ret=msgrcv(msg_id,&msg_mbufs[t],len,10,msg_rflags);
printf("no = %d username = %s\n",msg_mbufs[t].no,msg_mbufs[t].username);
if (-1==ret)
{
printf("接受消息失败\n");
}
else
{
printf("接受消息成功,长度:%d\n",ret);
}
}
ret=msgctl(msg_id,IPC_RMID,NULL);
if (-1==ret)
{
printf("删除消息失败\n");
}
else
printf("删除消息成功\n");
return 0;
}
A 和 B 是 相对独立的两支程序,现在 A 传送 10 个Student 到 B
B 将Student 读取出来,显示在界面上
然后 B 传送 10 个 Teacher 到 A ,A 显示 teacher 在界面上
#include "public.h"
typedef struct students
{
long mtype;
int no;
char username[100];
}*StusNode,SNode;
int main()
{
int ret=-1;
int msg_flags,msg_id;
key_t key;
struct msqid_ds msg_info;
SNode msg_mbuf[10],msg_mbufs[10];
for (int t=0;t<10;t++)
{
msg_mbuf[t].mtype=10;
msg_mbuf[t].no=t;
strcpy(msg_mbuf[t].username,"students");
}
int msg_sflags,msg_rflags;
char *msgpath="/ipc/msg/";
key=ftok(msgpath,'b');
if (key!=-1)
{
printf("成功创建KEY\n");
}
else
{
printf("建立KEY失败\n");
}
msg_flags=IPC_CREAT|IPC_EXCL;
msg_id=msgget(key,msg_flags|0x0666);
if (-1==msg_id)
{
printf("消息建立失败\n");
return 0;
}
msg_sflags=IPC_NOWAIT;
//msg_mbuf.mtypes=10;
for (int t=0;t<10;t++)
{
int len = sizeof(SNode)-sizeof(long);
ret=msgsnd(msg_id,&msg_mbuf[t],len,msg_sflags);
if (-1==ret)
{
printf("发送消息失败\n");
}
else
printf("发送成功\n");
}
msg_rflags=IPC_NOWAIT|MSG_NOERROR;
for (int t=0;t<10;t++)
{
int len = sizeof(SNode)-sizeof(long);
ret=msgrcv(msg_id,&msg_mbufs[t],len,10,msg_rflags);
printf("no = %d username = %s\n",msg_mbufs[t].no,msg_mbufs[t].username);
if (-1==ret)
{
printf("接受消息失败\n");
}
else
{
printf("接受消息成功,长度:%d\n",ret);
}
}
ret=msgctl(msg_id,IPC_RMID,NULL);
if (-1==ret)
{
printf("删除消息失败\n");
}
else
printf("删除消息成功\n");
return 0;
}
相关文章推荐
- 消息队列(Message Queue)简介及其使用
- Handler详解系列(二)——主线程向自身消息队列发消息
- 【Linux】进程间通信之消息队列
- 消息队列简介及应用场景相关
- redis消息队列启动
- redis作为消息队列的使用
- Linux下进程间通信之消息队列
- 进程间通信的方式-信号、管道、消息队列、共享内存
- 消息队列和管道的区别(转载)
- 多线程消息队列 (MSMQ) 触发器 -http://blog.sina.com.cn/s/blog_405ad00201007rlw.html
- Java JMS消息队列技术
- 消息队列技术的介绍和原理(MQ)
- RabbitMQ之消息持久化(队列持久化、消息持久化)
- Looper中的消息队列处理机制
- 进程间通信之消息队列
- 消息队列在项目中的使用总结
- 消息队列应用场景
- 消息队列之JMS和AMQP对比
- 分布式消息队列RocketMQ部署与监控
- 消息队列的技术选择分析