Во время открытия почтового ящика с помощью функции CreateFile клиент (записывающая программа) может указывать его имя в следующем виде:
• \\ .\mailslot\ [путь]имя — определяет локальный почтовый ящик.
• \\имя_компьютера\mailslot\[путь]имя — определяет почтовый ящик, расположенный на компьютере с заданным именем.
• \\имя_домена\mailslot\[путь]имя — определяет все почтовые ящики с данным именем, расположенные на компьютерах, принадлежащих данному домену. В этом случае максимальный размер сообщения составляет 424 байта.
• \\*\mailslot\[путь]имя — определяет все почтовые ящики с данным именем, расположенные на компьютерах, принадлежащих главному домену системы. В этом случае максимальный размер сообщения составляет 424 байта.
Наконец, клиент должен указывать флаг FILE_SHARE_READ. Функции GetMailslotInfo и SetMailslotInfо похожи на свои аналоги, работающие с именованными каналами.
Средства, сопоставимые с почтовыми ящиками, в UNIX отсутствуют. Однако для этой цели могут быть использованы широковещательные (broadcast) или групповые (multicast) дейтаграммы протокола TCP/IP.
Создание, подключение и именование каналов и почтовых ящиков
В табл. 11.1 сведены все допустимые формы имен каналов, которые могут использоваться клиентами и серверами приложения. Здесь же перечислены все функции, которые следует использовать для создания именованных каналов и соединения с ними.
Аналогичная информация для почтовых ящиков приведена в табл. 11.2. Вспомните, что почтовый клиент (или сервер) не обязательно должен выполняться тем же процессом или даже на той же системе, что и клиент (или сервер) приложения.
Таблица 11.1. Именованные каналы: создание, подключение и именование
Клиент приложения | Сервер приложения | |
---|---|---|
Дескриптор именованного канала или соединение | CreateFile CallNamedPipe TransactNamedPipe | CreateNamedPipe |
Имя канала | \\.\имя канала (канал является локальным) \\имя системы\имя канала (канал является локальным или удаленным) | \\.\имя канала (канал создается локальным) |
Таблица 11.2. Почтовые ящики: создание, подключение и именование
Почтовый клиент | Почтовый сервер | |
---|---|---|
Дескриптор почтового ящика | CreateFile | CreateMailslot |
Имя почтового ящика | \\.\имя почтового ящика (почтовый ящик является локальным) \\имя системы\имя почтового ящика (почтовый ящик располагается на указанной удаленной системе) \\*\имя почтового ящика (все почтовые ящики, имеющие одно и то же указанное имя) | \\.\имя почтового ящика (почтовый ящик создается локальным) |
Пример: сервер, обнаруживаемый клиентами
Программа 11.4 представляет функцию потока, которую сервер командной строки (программа 11.3),