Исходный текст клиентского приложения MSLOTC представлен в листинге 2.14.
Листинг 2.14. Файл mailslot/mslotc/mslotc.c
// ==================================================
// Приложение MSLOTC (клиентское приложение)
// Демонстрация использования каналов Mailslot
// для передачи данных между процессами
//
// (С) Фролов А.В., 1996
// Email: frolov@glas.apc.org
// ==================================================
#include <windows.h>
#include <stdio.h>
#include <conio.h>
DWORD main(int argc, char *argv[])
{
// Идентификатор канала Mailslot
HANDLE hMailslot;
// Буфер для имени канала Mailslot
char szMailslotName[256];
// Буфер для передачи данных через канал
char szBuf[512];
// Количество байт, переданных через канал
DWORD cbWritten;
printf("Mailslot client demo\n"
"(C) A. Frolov, 1996, Email: frolov@glas.apc.org\n");
printf("Syntax: mslotc [servername]\n");
// Если при запуске было указано имя срвера,
// указываем его в имени канала Mailslot
if(argc > 1)
sprintf(szMailslotName, "\\\\%s\\mailslot\\$Channel$",
argv[1]);
// Если имя сервера задано не было, создаем канал
// с локальным процессом
else
strcpy(szMailslotName, "\\\\.\\mailslot\\$Channel$");
// Создаем канал с процессом MSLOTS
hMailslot = CreateFile(
szMailslotName, GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// Если возникла ошибка, выводим ее код и
// завершаем работу приложения
if(hMailslot == INVALID_HANDLE_VALUE)
{
fprintf(stdout,"CreateFile: Error %ld\n",
GetLastError());
getch();
return 0;
}
// Выводим сообщение о создании канала
fprintf(stdout,"\nConnected. Type 'exit' to terminate\n");
// Цикл посылки команд через канал
while(1)
{
// Выводим приглашение для ввода команды