#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <error.h>
#define BUF_SIZE 128
struct mymsg
{
long mtype;
char mtext[BUF_SIZE];
};
void send_msg(int msgid,struct mymsg msgbuf);
void receive_msg(int msgid,struct mymsg *qbuf,long type);
void del_msg(int msgid);
int get_key()
{
int key;
key=ftok(".",'s');
}
int main()
{
struct mymsg msgbuf;
key_t key;
int msgid;
key=get_key();
if(key<0)
{
perror("get key error");
exit(1);
}
msgid=msgget(key,IPC_CREAT|0644);
if(msgid<0)
{
perror("msgget error");
exit(1);
}
printf("get msg success\n");
send_msg(msgid,msgbuf);
receive_msg(msgid,&msgbuf,0);
del_msg(msgid);
}
void send_msg(int msgid,struct mymsg msgbuf)//发送消息
{
printf("enter the msg text\n");
fgets(msgbuf.mtext,BUF_SIZE,stdin);//消息的内容
msgbuf.mtype=1;//消息的类型
//int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
if(msgsnd(msgid,(void *)&msgbuf,BUF_SIZE,0)==-1)
{
perror("send msg error");
exit(1);
}
printf("send msg success\n");
}
void receive_msg(int msgid,struct mymsg *qbuf,long type)
{
printf("正在接收消息\n");
//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
if(msgrcv(msgid,qbuf, BUF_SIZE,type,IPC_NOWAIT)==-1)
{
printf("rcv msg error\n");
exit(1);
}
else printf("Type:%ld,Text:%s",qbuf->mtype,qbuf->mtext);
}
void del_msg(int msgid)
{
if(msgctl(msgid,IPC_RMID,0)==-1)
{
perror("rm msg error");
exit(1);
}
}