通过消息队列实现进程之间通信代码示例
发送消息
#include <myhead.h>
struct msgbuf{
char person;//消息队列的消息类型
char buf[1024];//消息正文
};
int main(int argc, const char *argv[])
{
//创建消息队列
key_t key=ftok("/",'k');
if(key==-1){
perror("ftok error");
return -1;
}
//打开消息队列
int msggid;
if((msggid=msgget(key,IPC_CREAT|0664))==-1){
perror("msgget error");
return -1;
}
struct msgbuf mbuf={.person='C'};
while(1){
bzero(mbuf.buf,sizeof(mbuf.buf));
//从终端获取信息
fgets(mbuf.buf,sizeof(mbuf.buf),stdin);
//将字符串末尾'\n'换成'\0'
mbuf.buf[strlen(mbuf.buf)-1]='\0';
//从消息队列中写入消息
if(msgsnd(msggid,&mbuf,sizeof(mbuf)-sizeof(char),0)!=0){
perror("msgsnd error");
return -1;
}
if(strcmp(mbuf.buf,"quit")==0){
break;
}
}
return 0;
}
接收消息
#include <myhead.h>
struct msgbuf{
char person;//消息队列的消息类型
char buf[1024];//消息正文
};
int main(int argc, const char *argv[])
{
//创建消息队列
key_t key=ftok("/",'k');
if(key==-1){
perror("ftok error");
return -1;
}
//打开消息队列
int msggid;
if((msggid=msgget(key,IPC_CREAT|0664))==-1){
perror("msgsnd error");
return -1;
}
struct msgbuf mbuf;
while(1){
bzero(mbuf.buf,sizeof(mbuf.buf));
//从消息队列中读取消息
if(msgrcv(msggid,&mbuf,sizeof(struct msgbuf)-sizeof(char),0,0)==-1){
perror("msgrcv error");
return -1;
}
printf("%s\n",mbuf.buf);
if(strcmp(mbuf.buf,"quit")==0){
break;
}
}
//删除消息队列
if(msgctl(msggid,IPC_RMID,NULL)==-1){
perror("msgctl error");
return -1;
}
return 0;
}