Шаг 156 - Создаем клиента почтового слота

Клиент почтового слота должен использоваться функцию CreateFile для открытия слота, но с флагом FILE_SHARE_READ. Потом он может воспользоваться функций WriteFile для записи информации. Смотрим пример:

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

void main()
{
	HANDLE hf=NULL;
	hf=CreateFile("\\\\.\\mailslot\\hello",GENERIC_WRITE,
		FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if (hf!=INVALID_HANDLE_VALUE)
	{
		cout << "Ok Open" << endl;
		char buffer[255];
		strcpy(buffer,"hello mail slot");
		DWORD dwwr;
		if (WriteFile(hf,&buffer,strlen(buffer),&dwwr,NULL)!=0)
		{
			cout << "OK Write" << endl;
		}
	}
}

Если сервер будет запушен, то он получит сообщение:

156_1.gif (6821 b)

Да еще одно но. В MSDN написано, что если клиент открываеи слот прежде чем слот был создан сервером, то он получит INVALID_HANDLE_VALUE:

156_2.gif (2966 b)

Как раз этого INVALID_HANDLE_VALUE я и не получаю. Если ошибка в пути, то действительно файл не открывается.

CreateFile("\\\\.\\ailslot\\hello",

А при явном бредовом имени:

CreateFile(\\\\.\\mailslot\\hel23lo

Все происходит успешно кроме записи.

156_3.gif (3320 b)


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