Реферат Курсовая Конспект
Mailslot[Путь]ИмяПочтовогоЯщика - раздел Образование, Обмен информацией между процессами с помощью каналов и почтовых ящиков В Последних Двух Случаях Размер Сообщений Ограничивается 400 Байтами. ...
|
В последних двух случаях размер сообщений ограничивается 400 байтами.
Запись и чтение данных в почтовых ящиках осуществляется аналогично записи и чтению в каналах.
Определение состояния Mailslot
Серверный процесс может определить текущее состояние Mailslot по его идентификатору с помощью функции GetMailslotInfo.
Пример. Передача данных от программы-клиента программе-серверу с помощью почтового ящика на одной рабочей станции.
Программа-сервер
#include <windows.h>
#include <stdio.h>
#include <conio.h>
BOOL fReturnCode; // Код возврата из функций
DWORD cbMessages; // Размер сообщения в байтах
DWORD cbMsgNumber; // Количество сообщений в Mailslot
HANDLE hMailslot; // Идентификатор Mailslot
LPSTR lpszMailslotName = "\\.\mailslot\$MyFirstMailslot"; // Имя Mailslot
char szBuf[512]; // Буфер для передачи данных через Mailslot
DWORD cbRead; // Количество байт данных, принятых через Mailslot
int main()
{
// Создаем Mailslot, с именем lpszMailslotName
hMailslot = CreateMailslot(lpszMailslotName, 0,
MAILSLOT_WAIT_FOREVER, NULL);
// Если возникла ошибка, завершаем работу приложения
if(hMailslot == INVALID_HANDLE_VALUE)
{
printf("Error MailSlot Creating!!!n");
getch();
return 0;
}
while (1)
{
// Определяем состояние канала Mailslot
fReturnCode = GetMailslotInfo(hMailslot, NULL,
&cbMessages, &cbMsgNumber, NULL);
if(!fReturnCode)
{
printf("Get MailSlotInfo Error!!!n");
getch();
return 0;
}
// Если в Mailslot есть сообщения, читаем первое и выводим на экран
if(cbMsgNumber != 0)
{
if(ReadFile(hMailslot, szBuf, 512, &cbRead, NULL))
printf("Received %d bytes: <%s>n", cbRead, szBuf);
else printf("Error Data Transfer!!!n");
break;
}
}
getch();
CloseHandle(hMailslot);
return 0;
}
Программа-клиент
#include <windows.h>
#include <stdio.h>
#include <conio.h>
HANDLE hMailslot; // Идентификатор Mailslot
char szMailslotName[256]; // Буфер для имени Mailslot
char szBuf[512]; // Буфер для передачи данных через Mailslot
DWORD cbWritten; // Количество байт, переданных через Mailslot
LPSTR lpszMailslotName = "\\.\mailslot\$MyFirstMailslot"; // Имя Mailslot
int main()
{
// Создаем Mailslot
hMailslot = CreateFile(
lpszMailslotName, GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// Если возникла ошибка, завершаем работу приложения
if(hMailslot == INVALID_HANDLE_VALUE)
{
printf("CreateFile Error!!!n");
getch();
return 0;
}
// Посылка данных через Mailslot
strcpy(szBuf,"Test MailSlot Connection");
if(!WriteFile(hMailslot, szBuf, strlen(szBuf) + 1, &cbWritten, NULL))
// Если произошла ошибка, выдаем сообщение
printf("Error Data Transfer!!!n");
else printf("Transferred %d bytes: <%s>n", cbWritten, szBuf);
CloseHandle(hMailslot);
getch();
return 0;
}
– Конец работы –
Эта тема принадлежит разделу:
Обмен информацией между процессами с помощью каналов и почтовых ящиков... Цель работы изучить возможности применения механизма обмена данными между процессами в операционной системе Windows...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Mailslot[Путь]ИмяПочтовогоЯщика
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов