消息队列的发送与接收

时间:2022-10-26 17:35:47
/ /消息队列的发送与接收
#include <stdio.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <unistd.h>
#include <string.h>//不包含此头文件,会出现“警告:隐式声明与内建函数strcpy不兼容”
struct msg_buf
{
int mtype;
char data[255];
};
int main(int argc, char *argv[])
{
key_t key;
int msgid;
int ret;
struct msg_buf msgbuf;


key=ftok("2",'a');//2为对应文件路径 不存在也无妨,a不用管 只要不为0即可
printf("key=[%x]\n",key);
msgid=msgget(key,IPC_CREAT|0666);//通过文件对应


if(msgid==-1)
{
printf("creat error\n");
return -1;
}


msgbuf.mtype=getpid();
strcpy(msgbuf.data,"jia anhao");
//发送
ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
//magid将消息发送到消息队列的标识符,msgbuf为要发送的内容,sizeof为数据长度,最后一个为:数据满时的处理方法
if(ret==-1)
{
printf("send message error\n");
return -1;
}
//接收函数
ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),IPC_NOWAIT);
if(ret==-1)
{
printf("recv message error\n");
return -1;
}
printf("recv msg= [%s]\n",msgbuf.data);
return 0;
}