#include<sys/types.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<sys/msg.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int pid,msqid;
struct msgbuf
{
long mtype;
char mtext[20];
}send_buf,recv_buf;
if((msqid = msgget(IPC_PRIVATE,0700))<0)
{
printf("消息队列创建失败\n");
exit(1);
}
else
printf("消息队列创建成功其识别代码为%d。\n",msqid);
if ((pid = fork())<0)
{
printf("创建fork()失败");
exit(2);
}
else if(pid > 0)
{
send_buf.mtype = 1;
strcpy(send_buf.mtext,"my test info");
printf("发送到消息队列的内容为:%s\n",send_buf.mtext);
if(msgsnd(msqid,&send_buf,20,IPC_NOWAIT)<0)
{
printf("msgsnd消息发送失败。\n");
exit(3);
}
else
printf("消息发送成功。\n");
sleep(2);
exit(0);
}
else
{
sleep(2);
int infolen;
if((infolen = msgrcv(msqid,&recv_buf,20,0,IPC_NOWAIT))<0)
{
printf("msgrcv读取错误。\n");
exit(4);
}
else
printf("msgrcv读取成功。\n");
printf("自消息队列读到内容为%s,共读取%d个字符\n",recv_buf.mtext,infolen);
if((msgctl(msqid,IPC_RMID,NULL))<0)
{
printf("msgctl调用错误。\n");
exit(5);
}
else
{
printf("识别代号为%d的消息队列已经成功删除。\n",msqid);
exit(0);
}
}
}