открывается для вывода данных, а в программе 11.3.2 та же FIFO-структура
channel. 1 — для ввода данных. Слелует иметь в виду, что FIFO-структуры действуют как однонаправленные механизмы связи, поэтому не пытайтесь пересылать данные в обоих направлениях! Достоинство использования
iostreams -классов в сочетании с FIFO-структурами состоит в том, что мы можем использовать
iostreams -методы применительно к FIFO-структурам. Например, в строкеЗО мы используем метод
is_open() класса
basic_filebuf, который позволяет определить, открыта ли FIFO-структура. Если она не открыта, то программа 11.3.2 завершается. Детали реализации программы 11.3.2 приведены в разделе «Профиль программы 11.3.2».
Профиль программы 11.3.2
Имя программы
programll-3b.ee
Описание
Программа считывает объекты из FIFO-структуры с помощью объекта типа ifstream. Для пересылки данных через FIFO-структуру здесь используется итератор типа ostream_iterator и стандартный алгоритм transform.
Требуемые заголовки
>, , , , , , , , , , , ^, .
Инструкции по компиляции и компоновке программ
с++ -о programll-3b programll-3b.сс
; Среда для тестирования
SuSE Linux 7.1, GCC 2.95.2, Solaris 8, Sun Workshop 6.0.
Инструкции по выполнению
program11.3a & program11-3b
Примечания
Cначала запускается программа11.3.1. Программа11.3.2 содержит инструкцию Sleep, которая восполняет собой отсутствие реальной синхронизации.
Упростить межпроцессное взаимодействие (IPC) можно не только с помощью iostreams-классов или классов istream_iterator и ostream_iterator, но и посредством инкапсуляции FIFO-механизма в FIFO-классе (листинг 11.23).
// Листинг 11.23. Объявление FIFO-класса
class fifo{
mutex Mutex;
//.. .
protected:
string Name; public:
fifo &operator<<(fifo &In, int X);
fifo &operator<<(fifo &In, char X);
fifo &operator>>(fifo &Out, float X);
//.. .
};
В этом случае мы можем легко создавать объекты класса fifo с помощью конструктора, а также передавать их как параметры и принимать в качестве значений, возвращаемых функциями. Мы можем использовать их в сочетании с классами стандартных контейнеров. Применение такой конструкции значительно сокращает объем кода, необходимого для функционирования FIFO-механизма. Более того, «классовый» подход создает условия для обеспечения типовой безопасности и вообще позволяет программисту работать на более высоком уровне.