Клиент почтового слота должен использоваться функцию 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; } } }
Если сервер будет запушен, то он получит сообщение:
Да еще одно но. В MSDN написано, что если клиент открываеи слот прежде чем слот был создан сервером, то он получит INVALID_HANDLE_VALUE:
Как раз этого INVALID_HANDLE_VALUE я и не получаю. Если ошибка в пути, то действительно файл не открывается.
CreateFile("\\\\.\\ailslot\\hello",
А при явном бредовом имени:
CreateFile(\\\\.\\mailslot\\hel23lo
Все происходит успешно кроме записи.