4.3. Программные каналы

4.3. Программные каналы

Программные каналы имеются во всех существующих реализациях и версиях Unix. Канал создается вызовом pipe и предоставляет возможность однонаправленной (односторонней) передачи данных:

#include <unistd.h>

int pipe(int fd[2]);

/* возвращает 0 в случае успешного завершения. –1 – в случае ошибки:*/

Функция возвращает два файловых дескриптора: fd[0] и fd[1], причем первый открыт для чтения, а второй — для записи.

ПРИМЕЧАНИЕ

Некоторые версии Unix, в частности SVR4, поддерживают двусторонние каналы (full-duplex pipes). В этом случае канал открыт на запись и чтение с обоих концов. Другой способ создания двустороннего канала IPC заключается в вызове функции socketpair, описанной в разделе 14.3 [24]. Его можно использовать в большинстве современных версий Unix. Однако чаще всего каналы используются при работе с интерпретатором команд, где уместно использование именно односторонних каналов.

Стандарты Posix.1 и Unix 98 требуют только односторонних каналов, и мы будем исходить из этого.

Для определения типа дескриптора (файла, программного канала или FIFO) можно использовать макрос S_ISFIFO. Он принимает единственный аргумент: поле st_mode структуры stat и возвращает значение «истина» (ненулевое значение) или «ложь» (ноль). Структуру stat для канала возвращает функция fstat. Для FIFO структура возвращается функциями fstat, lstat и stat.

На рис. 4.2 изображен канал при использовании его единственным процессом.

Рис. 4.2. Канал в одиночном процессе

Хотя канал создается одним процессом, он редко используется только этим процессом (пример канала в одиночном процессе приведен в листинге 5.12). Каналы обычно используются для связи между двумя процессами (родительским и дочерним) следующим образом: процесс создает канал, а затем вызывает fork, создавая свою копию — дочерний процесс (рис. 4.3). Затем родительский процесс закрывает открытый для чтения конец канала, а дочерний, в свою очередь, — открытый на запись конец канала. Это обеспечивает одностороннюю передачу данных между процессами, как показано на рис. 4.4.

Рис. 4.3. Канал после вызова fork

Рис. 4.4. Канал между двумя процессами 

При вводе команды наподобие

who|sort|lp

в интерпретаторе команд Unix интерпретатор выполняет вышеописанные действия для создания трех процессов с двумя каналами между ними. Интерпретатор также подключает открытый для чтения конец каждого канала к стандартному потоку ввода, а открытый на запись — к стандартному потоку вывода. Созданный таким образом канал изображен на рис. 4.5.

Рис. 4.5. Каналы между тремя процессами при конвейерной обработке 

Все рассмотренные выше каналы были однонаправленными (односторонними), то есть позволяли передавать данные только в одну сторону. При необходимости передачи данных в обе стороны нужно создавать пару каналов и использовать каждый из них для передачи данных в одну сторону. Этапы создания двунаправленного канала IPC следующие:

1. Создаются каналы 1 (fd1[0] и fd1[1]) и 2 (fd2[0] и fd2[1]).

2. Вызов fork.

3. Родительский процесс закрывает доступный для чтения конец канала 1 (fd1[0]).

4. Родительский процесс закрывает доступный для записи конец канала 2 (fd2[1]).

5. Дочерний процесс закрывает доступный для записи конец канала 1 (fd1[1]).

6. Дочерний процесс закрывает доступный для чтения конец канала 2 (fd2[0]).

Текст программы, выполняющей эти действия, приведен в листинге 4.1. При этом создается структура каналов, изображенная на рис. 4.6.

Рис. 4.6. Двусторонняя передача данных по двум каналам

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Программные продукты

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

Программные продукты Представляют собой полный набор (или любой из его элементов) компьютерных программ, процедур, соответствующей документации и данных, который предназначен для поставки заказчику или конечному пользователю [IEEESTD-610].Все программные продукты являются


8.1.5.3 Программные средства

Из книги Информационная технология ПРОЦЕСС СОЗДАНИЯ ДОКУМЕНТАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОГРАММНОГО СРЕДСТВА автора Автор неизвестен


Программные DVB-тюнеры

Из книги Компьютер + TV: телевидение на ПК автора Гольцман Виктор Иосифович

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


Программные окна

Из книги Windows Vista автора Вавилов Сергей

Программные окна Структура программных окон едина для большинства приложений, поэтому, изучив один пример, вы без труда сможете сориентироваться в окне любой программы.Рассмотрим компоненты программных окон на примере стандартного приложения Windows – текстового


Программные требования

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Программные требования Программные требования к компьютеру при установке на него программы ArchiCAD следующие:? операционная система – Windows XP Pro или Vista Business / Enterprise / Ultimate Edition;? поддержка Java 1.6.0 или более поздняя;? проигрыватель – QuickTime, версия 7 или более поздняя. ПРИМЕЧАНИЕ В


Программные объекты

Из книги Основы AS/400 автора Солтис Фрэнк

Программные объекты До сих пор мы рассматривали только системные объекты и их характеристики. Однако в MI есть другие элементы данных, также называемые объектами, но имеющие очень малое сходство с обычными, что создает еще одну терминологическую проблему.В главе 4 мы


Программные телефоны

Из книги Asterisk™: будущее телефонии Второе издание автора Меггелен Джим Ван

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


15.12 Программные интерфейсы RPC и XDR

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

15.12 Программные интерфейсы RPC и XDR Приложения клиент/сервер для RPC строятся на основе библиотеки подпрограмм для создания, отправки и получения сообщений RPC. Другие программы библиотеки служат для преобразования между локальным представлением данных для параметров


Базовые программные элементы. NET

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Базовые программные элементы. NET Хорошо организованный интерфейс программированияТот, кто часто сталкивается с необходимостью использования Win32 API, знает, насколько противоречиво, запутанно и несистематично организован этот программный интерфейс. В Win32 API программист


Программные конструкции

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Программные конструкции В следующих разделах рассматриваются программные конструкции, распознаваемые в PSQL. Блоки BEGIN ... END PSQL является структурированным языком. После объявления переменных процедурные операторы заключаются в операторные скобки BEGIN и END. В процессе


Программные кодировщики MPEG

Из книги Видео на вашем компьютере: ТВ тюнеры, захват кадра, видеомонтаж, DVD автора Буковецкая Оксана Александровна

Программные кодировщики MPEG Если вам необходимо получать файлы с MPEG-сжатием, конечно, самое разумное решение – приобрести устройство, которое способно производить аппаратное сжатие. Но, увы, не всегда есть возможность по первому зову души покупать желаемое оборудование.


Программные интерфейсы

Из книги Операционная система UNIX автора Робачевский Андрей М.

Программные интерфейсы Программный интерфейс сокетов Вы уже познакомились с интерфейсом сокетов при обсуждении реализации межпроцессного взаимодействия в BSD UNIX. Поскольку сетевая поддержка впервые была разработана именно для BSD UNIX, интерфейс сокетов и сегодня


Глава 26 Программные потоки

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Глава 26 Программные потоки 26.1. Введение Согласно традиционной модели Unix, когда процессу требуется, чтобы некое действие было выполнено каким-либо другим объектом, он порождает дочерний процесс, используя функцию fork, и этим порожденным процессом выполняется необходимое


Программные модули

Из книги автора

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