📄 unionmsg.c
字号:
// Author: Wolfgang Wang// Date: 2001/8/29#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include "CommMsg.h"#include "CommMain.h"TUnionIDOfMsgBuf UnionInitializeMessageBuffer(TUnionUserIDOfMsgBuf UserIDOfMsg){ TUnionIDOfMsgBuf IDOfMsg; if (UserIDOfMsg <= 0) { UnionUserErrLog("in UnionInitializeMessageBuffer:: UserIDOfMsg [%d] must >= 0\n",UserIDOfMsg); return(-1); } if ( (IDOfMsg = msgget(UserIDOfMsg,0)) == -1) IDOfMsg = msgget(UserIDOfMsg,0666 | IPC_CREAT); if (IDOfMsg == -1) { UnionSystemErrLog("in UnionInitializeMessageBuffer:: cannot get queue id = %d\n",UserIDOfMsg); return(gErrHostCommCallingMsgget); } return (IDOfMsg); }int UnionReleaseMessageBuffer(TUnionUserIDOfMsgBuf UserIDOfMsg){ TUnionIDOfMsgBuf IDOfMsg; char buf[513]; if ((IDOfMsg = msgget(UserIDOfMsg,0666)) == -1) { UnionSystemErrLog("in UnionReleaseMessageBuffer::msgget fail! Message user ID = [%d]\n",IDOfMsg); return(gErrHostCommCallingMsgget); } memset(buf,0,513); sprintf(buf,"ipcrm -q %d",IDOfMsg); if (system(buf) < 0) { UnionSystemErrLog("in UnionReleaseMessageBuffer:: ipcrm -q [%d]\n",IDOfMsg); return(gErrHostCommCallingIpcrm); } return(0);}int UnionCleanMessageBuffer(TUnionIDOfMsgBuf IDOfMsgBuf,TUnionIDOfMsg IDOfMsg){ TUnionMsgInQueue sysmsg; int nNumber=0; memset(sysmsg.mtext,0,1024); for (;;) { if (msgrcv(IDOfMsgBuf,&sysmsg,1024,IDOfMsg,IPC_NOWAIT) < 0) break; nNumber++; } return (nNumber);}int UnionAddMessageToBuffer(TUnionIDOfMsgBuf IDOfMsgBuf,TUnionIDOfMsg IDOfMsg,PUnionAddress pMsgBuf,int nMsgBufLen){ TUnionMsgInQueue sysmsg; if (nMsgBufLen > 1024) { UnionSystemErrLog("in UnionAddMessageToBuffer:: Message buffer too long [%d]\n",nMsgBufLen); return (-1); } sysmsg.mtype = IDOfMsg; memset(sysmsg.mtext,0,1024); memcpy(sysmsg.mtext,pMsgBuf,nMsgBufLen); if (msgsnd(IDOfMsgBuf,&sysmsg,nMsgBufLen,~IPC_NOWAIT) == -1) { UnionSystemErrLog("in UnionAddMessageToBuffer: send msg to message queue [%d],Message buffer = *%s*\n",IDOfMsg,pMsgBuf); return (gErrHostCommCallingMsgsnd); } return(0);}int UnionGetFirstMessageFromBuffer(TUnionIDOfMsgBuf IDOfMsgBuf,PUnionIDOfMsg pIDOfMsg,PUnionAddress pMsgBuf){ TUnionMsgInQueue sysmsg; int rc; memset(sysmsg.mtext,0,1024); if ((rc = msgrcv(IDOfMsgBuf,&sysmsg,1024,0L,~IPC_NOWAIT)) == -1) { UnionSystemErrLog("in UnionGetFirstMessageFromBuffer:: msgrcv from queue = [%d]\n",IDOfMsgBuf); return (gErrHostCommCallingMsgrcv); } memcpy(pMsgBuf,sysmsg.mtext,rc); *pIDOfMsg = sysmsg.mtype; return(rc);}int UnionGetSpecifiedMessageFromBuffer(TUnionIDOfMsgBuf IDOfMsgBuf,TUnionIDOfMsg IDOfMsg,PUnionAddress pMsgBuf){ TUnionMsgInQueue sysmsg; int rc; memset(sysmsg.mtext,0,1024); if ((rc = msgrcv(IDOfMsgBuf,&sysmsg,1024,IDOfMsg,~IPC_NOWAIT)) < 0) { UnionSystemErrLog("in UnionGetSpecifiedMessageFromBuffer:: msgrcv from queue = %d msgid = %ld\n",IDOfMsg,IDOfMsg); return (gErrHostCommCallingMsgrcv); } memcpy(pMsgBuf,sysmsg.mtext,rc); return (rc);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -