Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Синопсис. #include <fstream>
#include < fstream> // UNIX-системы ifstream(int fd) fstream(int fd) ofstream(int fd) // gnu C++ void attach(int fd);
Связь каналов c iostream-объектами с помощью дескрипторов файлов
Существует три iostream-класса (ifstream, ofstream и fstream), которые мы можем использовать для подключения к каналу. Объект класса ifstream используется для ввода данных, объект класса ofstream — для их вывода, а объект класса fstream можно применять и в том и в другом случае. Несмотря на то что непосредственная поддержка дескрипторов файлов и потоков ввода-вывода не является частью стандарта ISO, в большинстве UNIX- и Linux-сред поддерживается С++-ориентированный iostream-доступ к дескрипторам файлов. В библиотеке GNU С++ iostreams предусмотрена поддержка дескриптора файла в одном из конструкторов классов ifstream, ofstream и fstream и в методе attach(), определенном в классах ifstream и ofstream. UNIX-компилятор языка С++ ко м пании Sun также поддерживает дескрипторы файлов с помощью одного из конструкторов классов ifstream, ofstream и fstream. Поэтому при выполнении следующего фрагмента кода //... int Fd[2]; Pipe(Fd); ifstream IPipe(Fd[0]); ofstream OPipe(Fd[1]); будут созданы объектно-ориентированные каналы. Объект IPipe будет играть роль входного потока, а объект OPipe— выходного. После создания эти потоки можно применять для связи между параллельно выполняемыми процессами с использованием потоково г о представления и операторов вставки (< <) и извлечения (> >). Для С++-сред, которые поддерживают метод attach(), дескриптор файла можно связать с объектами классов ifstream, ofstream или fstream, используя следующий синтаксис. // Листинг 11.20. Создание канала и использование // функции attach() int Fd[2]; ofstream OPipe; //... pipe(Fd); //... OPipe.attach(Fd[1]); //... OPipe < < Value < < endl; Такой способ использования объектно-ориентированных каналов предполагает существование сыновнего процесса, который может считывать из них информацию. В программе 11.1 для создания двух процессов используется fork-инструкция. Родительский процесс отправляет значение сыновнему процессу с помощью iostreams-ориентированного канала. // Программа 11.1 1 #include < unistd.h> 2 #include < iostream.h> 3 #include < fstream.h> 4 #include < math.h> 5 #include < sys/wait.h> 6 7 8 9 10 int main(int argc, char *argv[]) 11 { 13 int Fd[2]; Int Pid; Float Value; Int Status; 17 if(pipe(Fd)! = 0) { 18 cerr ««Ошибка при создании канала " «endl;
|