mail.cpp

来自「这是操作系统的上机资料,关于邮件槽,其中包括客户方和服务方」· C++ 代码 · 共 71 行

CPP
71
字号
#include "stdafx.h"
#include "mail.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR *argv[],TCHAR *envp[])
{
	DWORD dwNextSize(0),dwMsgCount(0);
	int nRetCode = 0;

static LPCTSTR c_szSlotName="\\\\.\\mailslot\\mymailslot";  //系统中mailslot的名称
HANDLE hSlot=CreateMailslot(c_szSlotName,//mailslot的名称
							0, //消息的最大长度,0表示最大长度
							MAILSLOT_WAIT_FOREVER,//等待输入时间,以毫秒计,0表示不等待,MAILSLOT_WAIT_FOREVER表示等待
							0);//默认安全性

if(hSlot!=INVALID_HANDLE_VALUE)
{
	while(true)
	{
          //查看当前的状态
               if(GetMailslotInfo(
				   hSlot,           //邮件槽的句柄
				   NULL,            //指定用于装载邮件槽的最大消息长度
				   &dwNextSize,     //用于装载下一条消息的长度
				   &dwMsgCount,     //用于装载邮件槽中准备好的消息数量
				   NULL))           //指定的默认阅读超时门限
			   {
                         	if(dwMsgCount>0)
							{
char *szBuffer=new char[dwNextSize+1]; //创建一个新的缓冲区
DWORD dwRead(0);
                if(ReadFile(
					hSlot,          //获得的邮件槽的句柄   
					szBuffer,       //数据缓冲区
					dwNextSize,     //缓冲区的长度
					&dwRead,        //指向读入的数据的指针
					NULL))          //同步的读
				{
					//从队列中消除消息
	szBuffer[dwRead]='\0';
std::cout<<szBuffer<<std::endl;
				}
delete []szBuffer;
szBuffer=NULL;
							}
else
{Sleep(100);}  //暂停


			   }
	}
}

//消除对象
CloseHandle(hSlot);
hSlot=INVALID_HANDLE_VALUE;

	return nRetCode;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?