Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Прогон программы для pipe в одном процессе

Читайте также:
  1. I)Однофакторный дисперсионный анализ (выполняется с применением программы «Однофакторный дисперсионный анализ» надстройки «Анализ данных» пакета Microsoft Excel).
  2. I. Определение эпидемического процесса и методологическое обоснование разделов учения об эпидемическом процессе.
  3. I. Определение эпидемического процесса и методологическое обоснование разделов учения об эпидемическом процессе.
  4. II. Структура программы
  5. III. Ожидаемый результат реализации программы
  6. IV. Информирование и участие общественности в процессе оценки воздействия на окружающую среду
  7. IV. Этапы внедрения программы
  8. quot;Чай освежает тело, укрепляет дух, смягчает сердце, пробуждает мысли, прогоняет леность". Восточный философ и врач Ибн Сина
  9. А) ЗАДАНИЯ ПО ОСНОВНЫМ РАЗДЕЛАМ ПРОГРАММЫ
  10. Абсолютно твердым телом называют такое тело, расстояние между двумя соседними точками которого в процессе вращения остается неизменным.

Достаточно яркой иллюстрацией действий по созданию pip'a, записи в него данных, чтению из него и освобождению выделенных ресурсов может служить программа, организующая работу с pip’ом в рамках одного процесса, приведенная ниже:

/* Программа 3-2.с, иллюстрирующая работу с pip'ом в рамках одного

процесса */

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

int main(){

int fd[2];

size_t size;

char string[] = "Hello, world!";

char resstring[14];

/* Попытаемся создать pipe */

if(pipe(fd) < 0){

/* Если создать pipe не удалось, печатаем об этом сообщение

и прекращаем работу */

printf("Can\'t create pipe\n");

exit(-1);

}

/* Пробуем записать в pipe 14 байт из нашего массива, т.е. всю

строку "Hello, world!" вместе с признаком конца строки */

size = write(fd[1], string, 14);

if(size!= 14){

/* Если записалось меньшее количество байт, сообщаем об

ошибке */

printf("Can\'t write all string\n");

exit(-1);

}

/* Пробуем прочитать из pip'а 14 байт в другой массив, т.е. всю

записанную строку */

size = read(fd[0], resstring, 14);

if(size < 0){

/* Если прочитать не смогли, сообщаем об ошибке */

printf("Can\'t read string\n");

exit(-1);

}

/* Печатаем прочитанную строку */

printf("%s\n",resstring);

/* Закрываем входной поток*/

if(close(fd[0]) < 0){

printf("Can\'t close input stream\n");

}

/* Закрываем выходной поток*/

if(close(fd[1]) < 0){

printf("Can\'t close output stream\n");

}

return 0;

}

Листинг 3.2. Программа 3-2.с, иллюстрирующая работу с pip'ом в рамках одного процесса

Наберите программу, откомпилируйте ее и запустите на исполнение.

Организация связи через pipe между процессом-родителем и процессом-потомком. Наследование файловых дескрипторов при вызовах fork() и exec()

Понятно, что если бы все достоинство pip'ов сводилось к замене функции копирования из памяти в память внутри одного процесса на пересылку информации через операционную систему, то это было бы не интересно. Однако таблица открытых файлов наследуется процессом-ребенком при порождении нового процесса системным вызовом fork() и входит в состав неизменяемой части системного контекста процесса при системном вызове exec() (за исключением тех потоков данных, для файловых дескрипторов которых был специальными средствами выставлен признак, побуждающий операционную систему закрыть их при выполнении exec(), однако их рассмотрение выходит за рамки нашего курса). Это обстоятельство позволяет организовать передачу информации через pipe между родственными процессами, имеющими общего прародителя, создавшего pipe.




Дата добавления: 2014-12-19; просмотров: 105 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав