⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unionmsg.c

📁 这是个unix环境下的通讯程序
💻 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 + -