Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт.doc
Скачиваний:
2
Добавлен:
10.09.2019
Размер:
107.52 Кб
Скачать

Індивідуальне завдання №5

Завдання

1.Написати програму на мові С, яка б організувала однонапрямлений зв'язок між співрідними (батьківським і ново­народженим) процесами через pipe.

2. Блок-схема

Початок головної програми

Оголошення змінних і масиву

так

Завершення програми

ні

так

Завершення програми

ні

Закриваємо потік даних в батьківському процесі

так

Завершення програми

ні

закриваємо вхідний потік і батьківський процес зупиняє роботу

закриваємо вихідний потік і завершуємо роботу

Завершення програми

Програма

#include<sys/types.h> #include <unistd.h> #include <stdio.h> int

main()

{

Int fd[2], resuit;

size_t size;

char resstring[14]; /*намагаємось створити pipe*/

if (pipe(fd)<0)

{

/*якщо створити pipe не вдалося, видаємо повідомлення і зупиняємо роботу*/

printf("Can\'t create pipè\n");

exit (-1);

}

/*породжуємо новий процес*/

if((result=fork())<0)

/*якщо створити новий процес не вдалось, повідомляємо і завершуємо роботу*/

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

}

else if(result>0) {

/*Ми знаходимось в батьківському процесі, який буде передавати ін­формацію новонародженому процесу. В ньому потік даних нам не бу­де потрібний, тому закриваєм його*/

close(fd[0]);

/*пробуємо записати в pipe 14 байт, тобто всю лінійку "Hello world!" разом з ознакою кінця строки*/

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

>

if (size !=14) {

/*якщо записана менша кількість байт, повідомляємо про помил­ку*/

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

}

/*закриваємо вхідний потік даних, на цьому батьківський процес зу­пиняє роботу*/

close (fd[l]);

printf ("parents exit\n");

}

else

{

/*Ми знаходимось в новонародженому процесі, який буде отримувати інформацію від батьківського процесу. Він унаслідував від батьківсь­кого процесу таблицю відкритих файлів і, знаючи файлові дескрипто­ри, які відповідають pipe, може його використовувати. В цьому проце­сі вхідний потік даних нам не потрібний, а тому закриваємо його.*/

close(fd[l]);

/* пробуємо прочитати із 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;

}

Висновок:

Під час виконання роботи я написав програму на мові С, яка організовувала однонапрямлений зв'язок між спів рідними процесами через PIPE.

Pipe служить для створення двонаправленого зв’язку між спів рідними процесами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]