Для создания сервера почтового слота используется функция:
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 говорить о том, что размер не лимитируется и дальше, что таймауты не ограничены. Запускаем и смотрим
Получилось. Давайте дадим умышлено неправильное имя для этого слота:
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;