- •Індивідуальне завдання №1
- •Int main 0
- •Індивідуальне завдання №2
- •2. Блок-схема
- •3. /* Програма - приклад створення нового процесу з однаковою роботою процесів нового і батьківського */
- •Int main 0 {
- •1.Підключення бібліотек.
- •Індивідуальне завдання №3
- •2. Блок-схема
- •Int main (int arge, char *argv [], char *envp []) /*повний прототип функції main*/
- •1.Підключення бібліотек.
- •Індивідуальне завдання №4
- •2. Блок-схема
- •Int main()
- •1.Підключення бібліотек.
- •Індивідуальне завдання №5
- •2. Блок-схема
- •Int fd[2], resuit;
Індивідуальне завдання №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 служить для створення двонаправленого зв’язку між спів рідними процесами.