| |
Каналы позволяют передавать данные между процессами в порядке поступления
(``первым пришел - первым вышел''), а также синхронизировать выполнение
процессов. Их использование дает процессам возможность взаимодействовать
между собой, пусть даже не известно, какие процессы находятся на другом
конце канала. Традиционная реализация каналов использует файловую систему
для хранения данных. Различают два вида каналов: поименованные каналы и,
за отсутствием лучшего термина, непоименованные каналы, которые идентичны
между собой во всем, кроме способа первоначального обращения к ним
процессов. Для поименованных каналов процессы используют системную
функцию open
, а системную функцию pipe
- для создания
непоименованного канала. Впоследствии, при работе с каналами процессы
пользуются обычными системными функциями для файлов, такими как
read
, write
и close
. Только связанные между собой
процессы, являющиеся потомками того процесса, который вызвал функцию
pipe
, могут разделять доступ к непоименованным каналам.
Поименованный канал - это файл, имеющий почти такую же семантику, как и
непоименованный канал, за исключением того, что этому файлу соответствует
запись в каталоге и обращение к нему производится по имени. Процессы
открывают поименованные каналы так же, как и обычные файлы, и,
следовательно, с помощью поименованных каналов могут взаимодействовать
между собой даже процессы, не имеющие друг к другу близкого отношения.
Поименованные каналы постоянно присутствуют в иерархии файловой системы
(из которой они удаляются с помощью системной функции unlink
), а
непоименованные каналы являются временными: когда все процессы заканчивают
работу с каналом, ядро отбирает назад его индекс.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |