Я пытаюсь разработать программу, в которой родительский процесс генерирует случайное число a от 1 до 500, отправляет его первому дочернему элементу, и этот дочерний элемент вычисляет максимальное число между сгенерированным и случайным числом a и отправляет его в следующий ребенок, который делает то же самое, пока не достигнет пятого ребенка.
До сих пор я придумал это, но столкнулся с двумя проблемами: родительский процесс не отправляет число первым; генерируемое случайное число не отличается для каждого дочернего процесса и одинаково при каждом его генерировании.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#define CHILDS 5
int biggestInt(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
int p1[2], p2[2];
int i, b, c, m, p;
if (pipe(p1) == -1)
{
fprintf(stderr, "Pipe1 Failed");
return -1;
}
for (i = 0; i < CHILDS; i++)
{
srand(time(0));
if (pipe(p2) == -1)
{
fprintf(stderr, "Pipe1 Failed");
return -1;
}
p = fork();
if (p == -1)
{
printf("Fork Failed\n");
exit(-1);
}
else if (p == 0)
{
close(p1[1]);
close(p2[0]);
b = rand() % 499 + 1;
printf("PID: %d ---- NUM: %d ---- i = %d\n", getpid(), b, i);
read(p1[0], &c, sizeof(int));
m = biggestInt(b, c);
write(p2[1], &m, sizeof(m));
close(p1[0]);
close(p2[1]);
exit(m);
}
close(p1[0]);
close(p1[1]);
p1[0] = p2[0];
p1[1] = p2[1];
}
close(p2[1]);
srand(time(0));
b = rand() % 499 + 1;
printf("PID: %d ---- NUM: %d ---- PARENT\n", getpid(), b);
write(p1[1], &b, sizeof(b));
close(p1[1]);
read(p2[0], &m, sizeof(int));
close(p2[0]);
printf("BIGGEST NUMBER: %d\n", m);
return 0;
}
И это вывод:
PID: 2709 ---- NUM: 267 ---- i = 0
PID: 2710 ---- NUM: 267 ---- i = 1
PID: 2711 ---- NUM: 267 ---- i = 2
PID: 2712 ---- NUM: 267 ---- i = 3
PID: 2708 ---- NUM: 267 ---- PARENT
PID: 2713 ---- NUM: 267 ---- i = 4
BIGGEST NUMBER: 267
Любая помощь?