[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Программные каналы
Программные каналы - это линии связи между двумя или более процессами.
По традиции, прикладные программы используют каналы следующим образом:
один процесс пишет данные в канал, а другой читает их оттуда. В SVR4
каналы стали двунаправленным механизмом, так что два процесса могут
передавать информацию в обоих направлениях через один программный
канал.
Существует два типа программных каналов: неименованные, часто
называемые просто каналами, и именованные каналы. Существуют
стандартные библиотечные функции, упрощающие использование каналов.
В отличие от обычных файлов, каналы могут пропускать через себя
неограниченно большой объем информации, хотя сами имеют небольшую
емкость (десять логических блоков).
Замечание: на большинстве машин логический блок имеет размер 512
байтов.
Однако, процессы не должны заботиться о переполнении канала избытком
данных или о невозможности читать из пустого канала. В канальный
механизм встроена синхронизация между читающим и пишущим процессами:
пишущий процесс блокируется, т.е. приостанавливает исполнение, при
попытке записи в переполненный канал, и, соответственно, читающий
процесс останавливается при попытке чтения из пустого канала.
Кроме того, процесс останавливается, если он открывает именованный
канал для чтения, а его партнер не открыл этот же канал для записи, и
наоборот. Далее в этом разделе вы изучите флаги O_NDELAY и O_NONBLOCK,
выключающие этот автоматический механизм синхронизации при открытии
именованного канала.
Оба типа каналов работают, в основном, одинаково, но используются
несколько различным образом. Они создаются различными системными
вызовами. Время жизни данных в канале не больше времени жизни
процессов, использующих его. Однако, именованный канал имеет
соответствующую запись в директории и существует, пока эту запись
явным образом не удалят. Запись в директории используется для
управления доступом к именованному каналу. Таким образом, преимущество
именованных каналов над обычными состоит в том, что их могут
использовать неродственные процессы.