Найти - Пользователи
Полная версия: Помогите пожалуйста с лабой
Начало » Центр помощи » Помогите пожалуйста с лабой
1
edgar1230
Помогите пожалуйста, очень нужно, я в этом не разбираюсь, дали задание в универе

Написать программу, которая порождает дочерний процесс, и общается с ним через средства
взаимодействия согласно варианту (Разделяемая память), передавая и получая информацию согласно варианту (Родитель передает потомку две строки 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);
}
Shaman
edgar1230
очень нужно, я в этом не разбираюсь, дали задание в универе
Просто интересно, как называется Ваша специальность?
edgar1230
Shaman
Просто интересно, как называется Ваша специальность?
Я не на программиста учусь, если это интересовало. Обычный инженер.
Puten
Что это за универ, где дают задания, которые студенты не в силах самостоятельно решить?

Или просто прогуливали пары?
Shaman
edgar1230
Я не на программиста учусь, если это интересовало. Обычный инженер.
Если дальше так продолжите, будете не обычным, а очень хреновым инженером.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB