您的位置:首页 > 其它

消息队列

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: