📄 sesmsgqueue.c
字号:
#include "sesMsgQueue.H"
//return: err=-1 suc>0int sesMsgQueue::MsqCreate(key_t key){ return(msgget(key, IPC_CREAT|0666));}//return: err=-1 suc>0 type:blockingint sesMsgQueue::MsqSend(int msqid, sesMsg msg){ int len = sizeof(struct msgbuf) - 1 + sizeof(struct sesMsgMem) - 1 + msg.msghead.msgSize;
struct msgbuf *pMsgbuf = (struct msgbuf *)malloc(len);
pMsgbuf->mtype = 1;
struct sesMsgMem *pSesMsgMem = (struct sesMsgMem *)pMsgbuf->mtext;
//struct sesMsg *pSesMsg = (struct sesMsg *)(&pMsgbuf->mtext[0]);
pSesMsgMem->msghead = msg.msghead;
memcpy(pSesMsgMem->msgbody, msg.message, msg.msghead.msgSize);
int ret = msgsnd(msqid, pMsgbuf, len - sizeof(long), 0);
free(pMsgbuf);
return ret;
}
//return: err=-1 suc>0 type:nonblockingint sesMsgQueue::MsqSendTo(int msqid, sesMsg msg)
{
int len = sizeof(struct msgbuf) - 1 + sizeof(struct sesMsgMem) - 1 + msg.msghead.msgSize;
struct msgbuf *pMsgbuf = (struct msgbuf *)malloc(len);
pMsgbuf->mtype = 1;
struct sesMsgMem *pSesMsgMem = (struct sesMsgMem *)pMsgbuf->mtext;
//struct sesMsg *pSesMsg = (struct sesMsg *)(&pMsgbuf->mtext[0]);
pSesMsgMem->msghead = msg.msghead;
//printf("msg.msghead.msgSize=%d\n", msg.msghead.msgSize);
//printf("msg.message=%s\n", msg.message);
memcpy(pSesMsgMem->msgbody, msg.message, msg.msghead.msgSize);
int ret = msgsnd(msqid, pMsgbuf, len - sizeof(long), IPC_NOWAIT);
free(pMsgbuf);
return ret;
}
//return: err=-1 suc>0int sesMsgQueue::MsqRecv(int msqid, sesMsg *msg)
{
char *pbuf = (char*)malloc(SESMSG_MAX_SIZE);
int ret = msgrcv(msqid, (struct msgbuf *)pbuf, SESMSG_MAX_SIZE, 0, 0);
struct msgbuf *pMsgbuf = (struct msgbuf *)pbuf;
struct sesMsgMem *pmsgmem = (struct sesMsgMem *)pMsgbuf->mtext;
printf("run kkkk\n");
msg->msghead = pmsgmem->msghead;
printf("pmsgmem->msghead.msgSize=%d\n", pmsgmem->msghead.msgSize);
// memcpy(msg->message, pmsgmem->msgbody, pmsgmem->msghead.msgSize);
free(pbuf);
printf("run ok\n");
return ret;
}
//return: err=-1 suc>0int sesMsgQueue::MsgRemove(int msqid){ return(msgctl(msqid, IPC_RMID, 0));}//return: err=-1 suc>0int sesMsgQueue::GetMsqId(key_t key){ return(msgget(key,0));}//return: err=-1 suc>=0int sesMsgQueue::GetMsgCount(int msqid){ msqid_ds msginfo; int reval; reval=msgctl(msqid, IPC_STAT, &msginfo); if(reval==-1) { //printf("get msg info error\n"); return reval; } int msgnum=msginfo.msg_qnum; //printf("last msgsnd time is %s", ctime(&(msginfo.msg_stime))); //printf("last msgrcv time is %s", ctime(&(msginfo.msg_rtime))); //printf("last change time is %s", ctime(&(msginfo.msg_ctime))); return msgnum;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -