или
ifstream на основе и
м ени, которое было «отсоединено». В строках 32-34, объекты типа
ostream_ iterator и
ofstream используются для вставки эле
м ентов в FIFO-структуру. Обратите вни
м ание на то, что програ
мм а 11.3.1 не образует никаких ветвлений и не создает сыновних процессов. Программа 11.3.1 зависит от другой програ
мм ы, которая должна считывать инфор
м ацию из FIFO-структуры
channel .
1 или записывать инфор
м ацию в FIFO-структуру
channel .
2 . Если такая программа не будет работать одновременно с программой 11.3.1, последняя останется заблокированной. Детали реализации приведены в разделе «Профиль программы 11.3.1».
Профиль программы 11.3.1
Имя программы program11-3a.cc
Описание Для пересылки контейнерного объекта через FIFO-структуру используются объекты ТИпа ostream_iterator и ofstream. Для извлечения информации из FIFO-структуры применяется объект типа ifstream.
Требуемые заголовки
, , , ,, , , , , , .
Инструкции по компиляции и компоновке программ
с++ -о program11-3a program113a.сс
Среда для тестирования
SuSE Linux 7.1, gcc 2.95.2, Solaris 8, Sun Workshop 6.
Инструкции по выполнению
./program11-3a & program11-3b
Примечания
Сначала запускается программа 11.3.1. Программа11.3.2 содержит инструкцию sleep, которая восполняет собой отсутствие реальной синхронизации.
Программа 11.3.2 считывает данные из FIFO-структуры channel. 1 и записывает информацию в FIFO-структуру channel. 2.
>// Программа 11.3.2. Считывание данных из FIFO-структуры
>// channel.l и запись информации в
>// FIFO-структурУ channel.2
>10 using namespace std; 11
>12 class multiplier{
>13 double X,-
>14 public:
>15 multiplier(double Value) { X = Value;}
>16 double &operator()(double Y) { X = (X * Y);return(X);}
>17 }; 18
>19
>20 int main(int argc,char *argv[])
>21 { 22
>23 double Size;
>24 double Data;
>25 vector X;
>26 multiplier R(1.5);
>27 sleep(15);
>28 fstream IPipe("/tmp/channel.1»);
>29 ofstream OPipe("/tmp/channel.2»,ios::app);
>30 if(IPipe.is_open()){
>31 IPipe » Size;
>32 }
>33 else{
>34 exit(l);
>35 }
>36 cout « «Количество элементов " << Size << endl;
>37 for(int N = 0;N < Size;N++)
>38 {
>39 IPipe » Data;
>40 X.push_back(Data);
>41 }
>42 OPipe « X.size() « endl;
>43 ostream_iterator Optr(OPipe,"\n»);
>44 transform(X.begin(),X.end(),Optr,R);
>45 OPipe << flush;
>46 OPipe.close();
>47 IPipe.close();
>48 return(0); 49
>50 }
Обратите внимание на то, что в программе 11.3.1 FIFO-стуктура channel.l