Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Средства межпроцессного взаимодействия

Автор:   •  Январь 13, 2022  •  Лабораторная работа  •  1,289 Слов (6 Страниц)  •  223 Просмотры

Страница 1 из 6

Лаботарорная работа №6

«Средства межпроцессного взаимодействия»

По дисциплине «СПО»

за пятый семестр

Цель работы: Ознакомиться с теоретическими сведениями по Именованным каналам (FIFO).

Написать программу, которая порождает дочерний процесс, и общается с ним через средства взаимодействия согласно варианту (Именованные каналы), передавая и получая информацию.(Родитель передает три строки, потомок возвращает самую длинную из них.). Передачу и получение информации каждым из процессов сопровождать выводом на экран информации типа "процесс такой-то передал/получил такую-то информацию".

Дочерние процессы начинают операции после получения сигнала SIGUSR1 от родительского процесса.

Текст программы

#include <unistd.h>

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <signal.h>

#include <stdlib.h>

#include <string.h>

void handler(int i)

{

        signal(SIGUSR1, handler);

        printf("\nРодительский процесс отправил SIGUSR1 дочернему!\n\n");        

}

int main()

{

        int fd, result;

        char name[] = "lwwwr.fifo"; /// Имя именованного канала

        char str1[] = "stroka1stroka1";

        char str2[] = "etoyzhevtorajastroka";

        char str3[] = "avotetotretijastrokaonadlinnee";

        

        (void) umask(0);

        

        if(mknod(name, S_IFIFO | 0666, 0) < 0)

        {

                printf("Невозможно создать FIFO!\n");

                exit(-1);

        }

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

        {

                printf("Не удалось создать процесс!\n");

                exit(-1);

        }

        

        else if (result > 0)

        {

                if((fd = open(name, O_WRONLY)) < 0)

                {

                        printf("Невозможно открыть FIFO для записи!\n");

                        exit(-1);

                }

                write(fd, &str1, strlen(str1));

                printf("Родительский процесс передал строку %s\n", str1);

                sleep(1);

                write(fd, &str2, strlen(str2));

                printf("Родительский процесс передал строку %s\n", str2);

                sleep(1);

                write(fd, &str3, strlen(str3));

                printf("Родительский процесс передал строку %s\n", str3);

                sleep(1);

                close(fd);

                kill(result, SIGUSR1);

        }

        

        else

        {

                if((fd = open(name, O_RDONLY)) < 0)

                {

                        printf("Невозможно открыть FIFO для чтения!\n");

...

Скачать:   txt (5.4 Kb)   pdf (85.3 Kb)   docx (10.2 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club