Средства межпроцессного взаимодействия
Автор: photo 001 • Январь 13, 2022 • Лабораторная работа • 1,289 Слов (6 Страниц) • 285 Просмотры
Лаботарорная работа №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");
...