![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Требуемые заголовки
< unistd.h>, < iomanip>, < algorithm>, < fstream.h>, < vector>, < iterator> < strstream.h>, < stdlib.h>, < sys/wait.h>, < sys/types.h>, < sys/stat.h> < fcntl.h>, < numeric>. Инструкции по компиляции и компоновке программ с++ -о 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 20 int main(int argc, char *argv[]) 21 { 22 23 double Size; 24 double Data; 25 vector< double> 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< double> 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 открывается для вывода данных, а в программе 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.
|