Шаг 155 - Создаем сервер почтового слота

Для создания сервера почтового слота используется функция:

HANDLE CreateMailslot
{
	LPCTSTR lpName,				// имя
	DWORD nMaxMessageSize,			// максимальный размер
	DWORD lReadTimeout,			// интервал-тайм аута чтения
	LPSECURITY_ATTRIBUTES lpSecurityAttributes	// информация о безопасности
);

При успешном выполнении мы получим указатель при неуспешном INVALID_HANDLE_VALUE. Обратите внимание на то, что имя должно быть уникальное. Пробуем:

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
	HANDLE hsl=NULL;
	hsl= CreateMailslot("\\\\.\\mailslot\\hello",0,MAILSLOT_WAIT_FOREVER,NULL);
	if (hsl!=INVALID_HANDLE_VALUE)
	{
		cout << "Ok Created mailslot" << endl;
	}
}

Имя я указал по правилам, дальше идет размер 0 говорить о том, что размер не лимитируется и дальше, что таймауты не ограничены. Запускаем и смотрим

155_1.gif (3281 b)

Получилось. Давайте дадим умышлено неправильное имя для этого слота:

hsl= CreateMailslot("\\\\.mailslot\\hello",0,MAILSLOT_WAIT_FOREVER,NULL);

Теперь не получается. После создания можно установить операцию чтения. Так как мы указали что ожидание будет до получения информации программа замрет.

if (hsl!=INVALID_HANDLE_VALUE)
{
	cout << "Ok Created mailslot" <<  endl;
	char buffer[255];
	DWORD nBytesRead;
	if (ReadFile(hsl, &buffer, 255, &nBytesRead, NULL)!=0) 
	{
		cout <<  "Ok read" <<  endl;
		cout <<  buffer <<  endl;
	}
}
int i;
cin >> i;

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.