Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Прогон программы для организации однонаправленной связи между родственными процессами через pipe




Рассмотрим программу, осуществляющую однонаправленную связь между процессом-родителем и процессом-ребенком:

/* Программа 03-3.с, осуществляющая однонаправленную связь через pipe между процессом-родителем и процессом-ребенком */ #include <sys/types.h>#include <unistd.h>#include <stdio.h>int main(){int fd[2], result;size_t size;char resstring[14]; /* Попытаемся создать pipe */if(pipe(fd) < 0){/* Если создать pipe не удалось, печатаем об этом сообщениеи прекращаем работу */printf("Can′t create pipe");exit(-1); } /* Порождаем новый процесс */ result = fork(); if(result){ /* Если создать процесс не удалось, сообщаем об этом и завершаемработу */printf("Can′t fork child");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"); exit(-1); } /* Закрываем входной поток данных, на этом родитель прекращает работу */close(fd[1]);printf("Parent exit");} else {/* Мы находимся в порожденном процессе, который будет получать информацию от процесса-родителя. Он унаследовал от родителя таблицу открытых файлов и, зная файловые дескрипторы, соответствующие pip, иможет его использовать.В этом процессе входной поток данных нам не понадобится, поэтому закрываем его.*/ close(fd[1]);/* Пробуем прочитать из pip′а 14 байт в массив, т.е. всю записаннуюстроку */size = read(fd[0], resstring, 14);if(size < 0){/* Если прочитать не смогли, сообщаем об ошибке изавершаемработу */printf("Can′t read string"); exit(-1); } /* Печатаем прочитанную строку */printf("%s",resstring);/* Закрываем входной поток и завершаем работу */ close(fd[0]); } return 0; }





Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных