Исходный текст серверного приложения MSLOTS представлен в листинге2.13.
Листинг 2.13. Файл mailslot/mslots/mslots.c
// ==================================================
// Приложение MSLOTS (серверное приложение)
// Демонстрация использования каналов Mailslot
// для передачи данных между процессами
//
// (С) Фролов А.В., 1996
// Email: frolov@glas.apc.org
// ==================================================
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main()
{
// Код возврата из функций
BOOL fReturnCode;
// Размер сообщения в байтах
DWORD cbMessages;
// Количество сообщений в канале Mailslot
DWORD cbMsgNumber;
// Идентификатор канала Mailslot
HANDLE hMailslot;
// Имя создаваемого канала Mailslot
LPSTR lpszMailslotName = "\\\\.\\mailslot\\$Channel$";
// Буфер для передачи данных через канал
char szBuf[512];
// Количество байт данных, принятых через канал
DWORD cbRead;
printf("Mailslot server demo\n"
"(C) A. Frolov, 1996, Email: frolov@glas.apc.org\n");
// Создаем канал Mailslot, имеющий имя lpszMailslotName
hMailslot = CreateMailslot(
lpszMailslotName, 0,
MAILSLOT_WAIT_FOREVER, NULL);
// Если возникла ошибка, выводим ее код и зваершаем
// работу приложения
if(hMailslot == INVALID_HANDLE_VALUE)
{
fprintf(stdout,"CreateMailslot: Error %ld\n",
GetLastError());
getch();
return 0;
}
// Выводим сообщение о создании канала
fprintf(stdout,"Mailslot created\n");
// Цикл получения команд через канал
while(1)
{
// Определяем состояние канала Mailslot
fReturnCode = GetMailslotInfo(
hMailslot, NULL, &cbMessages,
&cbMsgNumber, NULL);
if(!fReturnCode)
{
fprintf(stdout,"GetMailslotInfo: Error %ld\n",