Написать программу, которая порождает дочерний процесс, и общается с ним через средства
взаимодействия согласно варианту (Разделяемая память), передавая и получая информацию согласно варианту (Родитель передает потомку две строки S1 и S2, тот возвращает их конкатенацию S2+S1.).
Передачу и получение информации каждым из процессов сопровождать выводом на экран информации
типа “процесс такой-то передал/получил такую-то информацию”.
Дочерние процессы начинают операции после получения сигнала SIGUSR1 от родительского
процесса.
Для меня это написать невозможно(
Есть код на плюсах
#include <sys/types.h> #include <unistd.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <signal.h> #include <sys/mman.h> #include <string.h> #include <fcntl.h> bool f = false; void my_handler(int nsig) { if (nsig == SIGUSR1) { f=true; } } int main (void) { pid_t pid; char s[100]; char g[100]; char fs[100]; char fg[100]; int fd_shm, *shared,*shared2, i,j; /* Дескриптор объекта в разделяемой памяти*/ signal(SIGUSR1, my_handler); if ((fd_shm = shm_open("myshared.shm", O_RDWR | O_CREAT, 0777)) < 0) { perror ("error create shm"); return (1); } ftruncate(fd_shm, sizeof(s)); // Устанавливаем размер разделяемой памяти shared = mmap(NULL, sizeof(s), PROT_READ | PROT_WRITE, MAP_SHARED, fd_shm, 0); shared2 = mmap(NULL, sizeof(g), PROT_READ | PROT_WRITE, MAP_SHARED, fd_shm, 0); printf("Порождение ребенка \n"); if ((pid = fork()) == -1) printf("Ошибка!"); else if (pid == 0) { printf("1\n"); while (f == false){} printf("2\n"); for (i = 0; i < sizeof(s)/sizeof(char); i++) { fs[i]=*shared; *++shared;} printf("FS %s \n",fs); for (j = 0; j < sizeof(g)/sizeof(char); j++) {fg[j]=*shared; *++shared;} strcat(fs,fg); for (i = 0; i < sizeof(fs)/sizeof(char); i++) *shared2++ =fs[i]; printf("%s \n",fs); if (kill(getppid(), SIGUSR1) == false) { printf("Сигнал родителю\n"); } } else { printf("Введите первое слово: "); scanf("%s",s); printf("Введите второе слово: "); scanf("%s",g); for (i = 0; i < sizeof(s)/sizeof(char); i++) *shared++ =s[i]; // Записываем первое слово в разделяемую память for (j = 0; j < sizeof(g)/sizeof(char); j++) *shared++ =g[j]; // Записываем второе слово в разделяемую память if (kill(pid, SIGUSR1) == false) { printf("Сигнал послан\n"); } while (f==false){} for (i = 0; i < sizeof(fs)/sizeof(char); i++) {*shared = fs[i]; fs[i]=*shared2; *++shared2;} printf("%s \n",fs); wait(NULL); } exit(0); }