15 float &operator()(float Y) { X = (X * Y);return(X);}
16 }; 17
18
19 int main(int argc,char *argv[])
20 {
21 char Value[50] ;
22 int Fd[2] ;
23 float Data;
24 vector
25 int NumElements;
26 multiplier N(12.2);
27 strcpy(Value,getenv(«Fdin»));
28 Fd[0] = atoi(Value);
29 strcpy(Value,getenv(«Fdout»));
30 Fd[l] = atoi(Value);
31 ifstream IPipe;
32 ofstream OPipe;
33 IPipe.attach(Fd[0]) ;
34 OPipe.attach(Fd[l]) ;
35 ostream_iterator
36 IPipe » NumElements;
37 for(int N = 0;N < NumElements;N++)
38 {
39 IPipe » Data;
40 X.push_back(Data);
41 }
42 OPipe « X.size() « endl;
43 transform(X.begin(),X.end(),OPtr,N);
44 OPipe « flush;
45 return(0); 46
47 }
Сыновний процесс считывает элементы данных из канала, помещает их в вектор, азатем выполняет математические преобразования над каждым элементом вектора, после чего отправляет их назад родительскому процессу. Математические преобразования (строка43) выполняются с использованием стандартного С++-алгоритма transform и пользовательского класса multiplier. Алгоритм transform применяет к каждому элементу контейнера операцию, а затем результат этой операции помещает в контейнер-приемник. В данном случае контейнером-приемником служит объект Optr, который связан с объектом OPipe. Заголовки, которые необходимо включить в программу 11.2.1, приведены в разделе «Профиль программы 11.2.1».
Профиль программы 11.2.1
Имя программы program11-2b.cc
Описа
Требуемые заголовки
Инструкции no компиляции и компоновке программ
с++ -o»programll-2b programll-2b.ee
Инструкции по выполнению [Эта программа запускается программой 11.2.
Несмотря на то что классы библиотеки iostream, итераторы типа istream_iterator и ostream_iterator упрощают программирование канала, они не изменяют его поведение. По-прежнему остаются в силе вопросы блокирования и проблемы, связанные с корректным порядком открытия и закрытия каналов, рассмотренные в главе 5. Но использование основных механизмов тех же методов объектно-ориентированного программирования все же позволяет понизить уровень сложности параллельного и распределенного программирования.
FIFO-очереди (именованные каналы),