消息队列
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;
}