写消息:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct _msg_buf
{
long type;//消息类型
char buf[100];//消息类型
}msg_buf;
int main()
{
int key,qid;
int wc=1;
msg_buf buf;
key=ftok(".",10);
qid=msgget(key,IPC_CREAT|0666);
printf("key:%d\nqid=%d\n",key,qid);
buf.type=10;
system("ipcs -q");//查看当前存在的消息队列
printf("请输入一些消息,每条消息以回车结束,如果输入quit,则程序结束\n");
while(1)
{
//循环输入消息到队列
system("ipcs -q");
printf("输入第%d条消息:",wc++);
fgets(buf.buf,100,stdin);
if(strncmp(buf.buf,"quit",4)==0)
{
if((msgctl(qid,IPC_RMID,NULL))<0)//删除指定的消息队列
{
perror("msgctl");
exit(1);
}
else
{
printf("successfully removed %d queue\n",qid);
exit(0);
}
}
if(msgsnd(qid,(void*)&buf,100,0)<0)
{
perror("msgsnd");
exit(-1);
}
}
return 0;
}
读消息:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct _msg_buf
{
long type;
char buf[100];
} msg_buf;
int main()
{
int key,qid;
msg_buf buf;
key=ftok(".",10);
qid=msgget(key,IPC_CREAT|0666);
while(1)
{
if(msgrcv(qid,(void*)&buf,100,0,0)<0)
{
perror("msgrcv");
exit(-1);
}
system("ipcs -q");
printf("type:%ld\nget:%s\n",buf.type,buf.buf);
}
return 0;
}