Книга: Операционная система UNIX
Каналы
Каналы
Вспомните синтаксис организации программных каналов при работе в командной строке shell:
cat myfile | wc
При этом (стандартный) вывод программы cat(1), которая выводит содержимое файла myfile, передается на (стандартный) ввод программы wc(1), которая, в свою очередь подсчитывает количество строк, слов и символов. В результате мы получим что-то вроде:
12 45 260
что будет означать количество строк, слов и символов в файле myfile.
Таким образом, два процесса обменялись данными. При этом использовался программный канал, обеспечивающий однонаправленную передачу данных между двумя задачами.
Для создания канала используется системный вызов pipe(2):
int pipe(int* fildes);
который возвращает два файловых дескриптора — fildes[0]
для записи в канал и fildes[1]
для чтения из канала. Теперь, если один процесс записывает данные в fildes[0]
, другой сможет получить эти данные из fildes[1]
. Вопрос только в том, как другой процесс сможет получить сам файловый дескриптор fildes[1]
?
Вспомним наследуемые атрибуты при создании процесса. Дочерний процесс наследует и разделяет все назначенные файловые дескрипторы родительского. То есть доступ к дескрипторам fildes
канала может получить сам процесс, вызвавший pipe(2), и его дочерние процессы. В этом заключается серьезный недостаток каналов, поскольку они могут быть использованы для передачи данных только между родственными процессами. Каналы не могут использоваться в качестве средства межпроцессного взаимодействия между независимыми процессами.
Хотя в приведенном примере может показаться, что процессы cat(1) и wc(1) независимы, на самом деле оба этих процесса создаются процессом shell и являются родственными.
Рис. 3.17. Создание канала между задачами cat(1) и wc(1)
- ГЛАВА 4 Именованные и неименованные каналы
- 4.4. Двусторонние каналы
- 9.5. Пример: двусторонние каналы в gawk
- Глава 9 Управление процессами и каналы
- 1.2.1. Каналы: сцепление процессов
- 9.3. Базовое межпроцессное взаимодействие: каналы и очереди FIFO
- 9.3.1. Каналы
- Что такое веб-каналы и веб-фрагменты?
- Посылка зашифрованного текста через каналы электронной почты: формат Radix-64.
- Анонимные каналы
- Именованные каналы
- Часть 2 Каналы продвижения