linux系统编程中的消息队列该怎么使用呀??
展开全部
消息队列用于进程间通信,每个进程可以,只要该消息queueID队列
的#ifndef CMSGOP_H
#定义CMSGOP_H
#包括类型。 H>
#包括ipc.h>
#包括msg.h>中
类CMsgOp
{
公众:
CMsgOp ();
虚拟CMsgOp();
typedef结构_customMessageFormat {
整数PROCESSID;
整数CMD;
整数commandArg;
} CCustomMessageFormat; BR p>诠释的init();
整数发送(常量CCustomMessageFormat&消息);
整数接收(CCustomMessageFormat&消息);
私人:
整数msgQueueID;
结构msgbuf sendBuf;
结构msgbuf recvBuf;
};
#ENDIF / / CMSGOP_H
的#include“ cmsgop.h“
#包括中
#包括中
#包括中
CMsgOp :: CMsgOp()
> {
}
CMsgOp ::CMsgOp()
{
了msgctl(msgQueueID,IPC_RMID,NULL);
}
BR />整型CMsgOp :: init()中
的key_t的key = ftok的(“/ home/maemo/tmp2”,1);
如果(-1 ==键) {
PERROR(“ftok的失败!”);
返回-1;
}
整数RET = msgget(键,IPC_CREAT);
>如果(-1 == RET)
{
PERROR(“创建消息队列失败!”);
返回-1;
}
msgQueueID = RET;
返回0;
}
整数CMsgOp ::发送(常量CCustomMessageFormat&消息)
{的memcpy(sendBuf.mtext,及讯息,大小(CCustomMessageFormat));
sendBuf.mtype = 1;
整数RET =的msgsnd(msgQueueID,&sendBuf,大小(CCustomMessageFormat),0);
如果(-1 = = RET)
{
PERROR(“消息发送失败!”);
返回RET;
}
}
整数CMsgOp: :接收(CCustomMessageFormat&消息)
{
整数RET =的msgrcv(msgQueueID,与recvBuf,大小(CCustomMessageFormat),0,IPC_NOWAIT);
如果( - 1 == RET) {
PERROR(“接收消息失败!”);
返回-1;
}
的memcpy(&消息,recvBuf.mtext,大小(CCustomMessageFormat ));
返回RET;
}
的#ifndef CMSGOP_H
#定义CMSGOP_H
#包括类型。 H>
#包括ipc.h>
#包括msg.h>中
类CMsgOp
{
公众:
CMsgOp ();
虚拟CMsgOp();
typedef结构_customMessageFormat {
整数PROCESSID;
整数CMD;
整数commandArg;
} CCustomMessageFormat; BR p>诠释的init();
整数发送(常量CCustomMessageFormat&消息);
整数接收(CCustomMessageFormat&消息);
私人:
整数msgQueueID;
结构msgbuf sendBuf;
结构msgbuf recvBuf;
};
#ENDIF / / CMSGOP_H
的#include“ cmsgop.h“
#包括中
#包括中
#包括中
CMsgOp :: CMsgOp()
> {
}
CMsgOp ::CMsgOp()
{
了msgctl(msgQueueID,IPC_RMID,NULL);
}
BR />整型CMsgOp :: init()中
的key_t的key = ftok的(“/ home/maemo/tmp2”,1);
如果(-1 ==键) {
PERROR(“ftok的失败!”);
返回-1;
}
整数RET = msgget(键,IPC_CREAT);
>如果(-1 == RET)
{
PERROR(“创建消息队列失败!”);
返回-1;
}
msgQueueID = RET;
返回0;
}
整数CMsgOp ::发送(常量CCustomMessageFormat&消息)
{的memcpy(sendBuf.mtext,及讯息,大小(CCustomMessageFormat));
sendBuf.mtype = 1;
整数RET =的msgsnd(msgQueueID,&sendBuf,大小(CCustomMessageFormat),0);
如果(-1 = = RET)
{
PERROR(“消息发送失败!”);
返回RET;
}
}
整数CMsgOp: :接收(CCustomMessageFormat&消息)
{
整数RET =的msgrcv(msgQueueID,与recvBuf,大小(CCustomMessageFormat),0,IPC_NOWAIT);
如果( - 1 == RET) {
PERROR(“接收消息失败!”);
返回-1;
}
的memcpy(&消息,recvBuf.mtext,大小(CCustomMessageFormat ));
返回RET;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询