[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Программные каналы

Программные каналы - это линии связи между двумя или более процессами.
По традиции, прикладные программы используют каналы следующим образом:
один процесс  пишет данные  в канал, а другой читает их оттуда. В SVR4
каналы стали  двунаправленным механизмом,  так что  два процесса могут
передавать информацию  в обоих  направлениях  через  один  программный
канал.

Существует  два   типа  программных   каналов:  неименованные,   часто
называемые  просто   каналами,  и   именованные   каналы.   Существуют
стандартные библиотечные функции, упрощающие использование каналов.

В отличие  от обычных  файлов,  каналы  могут  пропускать  через  себя
неограниченно большой  объем информации,  хотя  сами  имеют  небольшую
емкость (десять логических блоков).
Замечание: на  большинстве машин  логический  блок  имеет  размер  512
байтов.
Однако, процессы  не должны  заботиться о переполнении канала избытком
данных или  о невозможности  читать из  пустого  канала.  В  канальный
механизм встроена  синхронизация между  читающим и пишущим процессами:
пишущий процесс  блокируется, т.е.  приостанавливает  исполнение,  при
попытке записи  в переполненный  канал,  и,  соответственно,  читающий
процесс останавливается при попытке чтения из пустого канала.

Кроме того,  процесс останавливается,  если он  открывает  именованный
канал для  чтения, а его партнер не открыл этот же канал для записи, и
наоборот. Далее в этом разделе вы изучите флаги O_NDELAY и O_NONBLOCK,
выключающие этот  автоматический механизм  синхронизации при  открытии
именованного канала.

Оба типа  каналов работают,  в основном,  одинаково,  но  используются
несколько  различным  образом.  Они  создаются  различными  системными
вызовами.  Время  жизни  данных  в  канале  не  больше  времени  жизни
процессов,  использующих   его.  Однако,   именованный   канал   имеет
соответствующую запись  в директории  и существует,  пока  эту  запись
явным  образом   не  удалят.  Запись  в  директории  используется  для
управления доступом к именованному каналу. Таким образом, преимущество
именованных  каналов   над  обычными  состоит  в  том,  что  их  могут
использовать неродственные процессы.