10 Программные каналы
Функция pipe создает прораммный канал между двумя взаимосвязанными процессами. В частности эта функция создает файл канала, который служит в качестве временного буфера и используется для того, чтобы вызывающий процесс мог записывать и считывать данные другого процесса. Файлу канала имя не присваивается, поэтому он называется неименованным каналом. Прототип функции:
int pipe (int fifo[2]).
Аргумент fifo является массивом, состоящим из двух целых чисел, присваиваемых ему интерфейсом pipe. В болшинстве систем Unix канал является однонаправленным, т. е. для чтения данных из канала процесс использует дескриптор файла fifo[0], а для записи данных в канал – другой дескриптор файла fifo[1].
Ниже приводится пример, в котором вызывающий процесс передает другому процессу через канал вещественное число, которое обрабатывается другим процессом и передается обратно.
#include <iostream.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
int child_pid;
int fifo[2], status;
int sf=sizeof(float);
float buf1=2;
pipe(fifo);
write(fifo[1],&buf1,sf);
child_pid=fork();
if (child_pid==0)
{ float buf2;
read(fifo[0],&buf2,sf);
buf2=buf2+1;
write(fifo[1],&buf2,sf);
exit(0);
};
wait(&status);
read(fifo[0],&buf1,sf);
cout << "buf1=" << buf1;
}
.
11 Задания на курсовую работу Задание 1
Написать программу на языке C++ для компилятора g++ системы UNIX, которая бы поддерживала следующие режимы:
- создание в домашнем каталоге файла с именем list и занесение в него нескольких записей следующего содержания: наименование компьютерной техники – строковый тип, количество – целый тип, цена – вещественный тип;
- обработка файла в соответствии с одним из вариантов, описанным ниже;
- просмотр содержания скорректированного файла list или нового файла list1.
При работе с файлами использовать файловые дескрипторы.
Вариант 1. Вывести на экран полное наименование дисплея, имеющего наиболее низкую цену. При поиске учитывать только записи, наименование техники в которых начинается со слова “Дисплей”.
Вариант 2. Создать новый файл list1 из записей файла list, наименование техники в которых начинается с символа “К”.
Вариант 3. Вычислить общую цену компьютерных устройств, данные о которых находятся во второй, пятой и седьмой записях файла list.
Вариант 4. Добавить в конец файла list первую, третью и четвертую записи из этого же файла.
Вариант 5. Сосчитать общее количество единиц компьютерной техники, сведения о которой хранятся в файле list.
Вариант 6. Вывести на экран данные n-й строки файла list. Значение n ввести с клавиатуры.
Вариант 7. Поменять местами третью и четвертую записи файла list.
Вариант 8. Изменить в файле list цену устройства “Системный блок” на новую цену 950.
Вариант 9. Удалить из файла list последнюю запись.
Вариант 10. Создать новый файл list1 из записей файла list, взятых в обратном порядке.
Вариант 11. Найти в файле list компьютерное устройство с наиболее высокой ценой.
Вариант 12. Определить общую стоимость компьютерной техники, сведения о которой хранятся в файле list.
Вариант 13. В файле list найти запись с наименованием “Сканер HP” и уменьшить количество, которое содержится в записи, на единицу.
Вариант 14. Создать новый файл list1 из записей файла list, наименование техники в которых начинается со слова “Дискеты”.
