Книга: Системное программирование в среде Windows
Анонимные каналы
Анонимные каналы
Анонимные каналы (anonymous channels) Windows обеспечивают однонаправленное (полудуплексное) посимвольное межпроцессное взаимодействие. Каждый канал имеет два дескриптора: дескриптор чтения (read handle) и дескриптор записи (write handle). Функция, с помощью которой создаются анонимные каналы, имеет следующий прототип:
BOOL CreatePipe(PHANDLE phRead, PHANDLE phWrite, LPSECURITY_ATTRIBUTES lpsa, DWORD cbPipe)
Дескрипторы каналов часто бывают наследуемыми; причины этого станут понятными из приведенного ниже примера. Значение параметра cbPipe, указывающее размер канала в байтах, носит рекомендательный характер, причем значению 0 соответствует размер канала по умолчанию.
Чтобы канал можно было использовать для IPC, должен существовать еще один процесс, и для этого процесса требуется один из дескрипторов канала. Предположим, например, что родительскому процессу, вызвавшему функцию CreatePipe, необходимо вывести данные, которые нужны дочернему процессу. Тогда возникает вопрос о том, как передать дочернему процессу дескриптор чтения (phRead). Родительский процесс осуществляет это, устанавливая дескриптор стандартного ввода в структуре STARTUPINFO для дочерней процедуры равным *phRead.
Чтение с использованием дескриптора чтения канала блокируется, если канал пуст. В противном случае в процессе чтения будет воспринято столько байтов, сколько имеется в канале, вплоть до количества, указанного при вызове функции ReadFile. Операция записи в заполненный канал, которая выполняется с использованием буфера в памяти, также будет блокирована.
Наконец, анонимные каналы обеспечивают только однонаправленное взаимодействие. Для двухстороннего взаимодействия необходимы два канала.
- Анонимные каналы
- Пример: перенаправление ввода/вывода с использованием анонимного канала
- Именованные каналы
- Функции транзакций именованных каналов
- Пример: клиент-серверный процессор командной строки
- Комментарии по поводу клиент-серверного процессора командной строки
- Почтовые ящики
- Создание, подключение и именование каналов и почтовых ящиков
- Пример: сервер, обнаруживаемый клиентами
- Комментарии по поводу многопоточных моделей
- Резюме
- Упражнения
- Глава 9 Управление процессами и каналы
- 9.3.1. Каналы
- Именованные каналы
- 4.3. Программные каналы
- Анонимные функции
- 5.4. Каналы
- Анонимные классы
- Анонимные методы в C#
- Анонимные валюты
- ГЛАВА 4 Именованные и неименованные каналы
- 4.4. Двусторонние каналы
- 1.3. Анонимные прокси-серверы: сокрытие IP-адреса и местонахождения