#include <stdio.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <string.h>
#include <stdlib.h>
struct msgbuf
{
long mtype;
char mtext[128];
};
int main(int argc, const char *argv[])
{
//key值
key_t key;
key=ftok("./",4);
if(key<0)
{
perror("ftok");
}
//创建消息队列
int qid;
qid=msgget(key,IPC_CREAT|0664);
{
if(qid<0)
{
perror("msgget");
}
}
struct msgbuf msgp;
while(1)
{
msgp.mtype=1;
printf("请输入向B进程发布的消息\n");
fgets(msgp.mtext,sizeof(msgp.mtext),stdin);
msgp.mtext[strlen(msgp.mtext)-1]='\0';
//向消息队列写入
int snd;
snd=msgsnd(qid,&msgp,sizeof(msgp.mtext),IPC_NOWAIT);
if(snd<0)
{
perror("snd");
}
if(strcmp(msgp.mtext,"quit")==0)
{
break;
}
//从消息队列读取
int rcv;
rcv=msgrcv(qid,&msgp,sizeof(msgp.mtext),2,0);
if(rcv<0)
{
perror("rcv");
break;
}
printf("读取到的数据%s\n",msgp.mtext);
if(strcmp(msgp.mtext,"quit")==0)
{
break;
}
}
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <string.h>
#include <stdlib.h>
struct msgbuf
{
long mtype;
char mtext[128];
};
int main(int argc, const char *argv[])
{
//key值
key_t key;
key=ftok("./",4);
if(key<0)
{
perror("ftok");
}
//创建消息队列
int qid;
qid=msgget(key,IPC_CREAT|0664);
{
if(qid<0)
{
perror("msgget");
}
}
struct msgbuf msgp;
while(1)
{
memset(&msgp,0,sizeof(msgp));
//从消息队列读取
int rcv;
rcv=msgrcv(qid,&msgp,sizeof(msgp.mtext),1,0);
if(rcv<0)
{
perror("rcv");
break;
}
if(strcmp(msgp.mtext,"quit")==0)
{
break;
}
printf("读取到的数据%s\n",msgp.mtext);
//向消息队列写入
msgp.mtype=2;
printf("请输入向A进程发布的消息\n");
fgets(msgp.mtext,sizeof(msgp.mtext),stdin);
msgp.mtext[strlen(msgp.mtext)-1]='\0';
int snd;
snd=msgsnd(qid,&msgp,sizeof(msgp.mtext),IPC_NOWAIT);
if(snd<0)
{
perror("snd");
}
if(strcmp(msgp.mtext,"quit")==0)
{
break;
}
}
return 0;