Основы операционных систем. Практикум

       

осуществляющая однонаправленную связь через pipe


/* Программа 05-3.с, осуществляющая однонаправленную связь через pipe

между процессом-родителем и процессом-ребенком */

#include

#include

#include

int main(){

int fd[2], result;

size_t size;

char resstring[14];

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

if(pipe(fd) < 0){

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

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

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

exit(-1);

}

/* Порождаем новый процесс */

result = fork();

if(result){

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

завершаем работу */

printf("Can\'t fork child\n");

exit(-1);

} else if (result > 0) {

/* Мы находимся в родительском процессе, который будет

передавать информацию процессу-ребенку. В этом процессе

выходной поток данных нам не понадобится, поэтому

закрываем его.*/

close(fd[0]);

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

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

size = write(fd[1], "Hello, world!", 14);

if(size != 14){

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

об ошибке и завершаем работу */

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

exit(-1);

}

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

родитель прекращает работу */

close(fd[1]);

printf("Parent exit\n");

} else {

/* Мы находимся в порожденном процессе, который будет

получать информацию от процесса-родителя. Он унаследовал

от родителя таблицу открытых файлов и, зная файловые

дескрипторы, соответствующие pip, иможет его использовать.

В этом процессе входной поток данных нам не

ипонадобится, поэтому закрываем его.*/

close(fd[1]);

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

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

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

if(size < 0){

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

завершаем работу */

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

exit(-1);

}

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

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

/* Закрываем входной поток и завершаем работу */

close(fd[0]);

}

return 0;

}


Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий