Как исправить вывод значения мусора при использовании функции fork() несколько раз? как мы можем использовать fifo вместо
Я получаю значение мусора при использовании функции fork() несколько раз, так или иначе не в состоянии сохранить результаты. Вы можете помочь мне найти ошибку? или любой другой способ, как fifo?
Я создал 4 дочерних процесса и 1 родительский процесс, чтобы найти минимальное число в массиве из 5 частей, например, array[] = {1, 2, 3, 4}, потомок 1 должен вернуть 1, потомок 2 должен вернуть 2 и в качестве способа, которым родитель должен вернуть минимум дочернего результата, т. Е. 1. Вместо этого все результаты отбрасывают значения.
pid = fork();
int p1,p2,p3,p4,smallest,m1,m2;
m1=N/4;
m2=m1+(N%4);
if (pid == 0) {
wait(NULL);
for(i=0;i<=((N/4)-1);i++)
{
arr1[i]=arr[i];
}
p1 = arr1[0];
for (i=0;i<m1;i++)
{
if (arr1[i] < p1)
{
p1 = arr1[i];
temp[0]=p1; }
}
printf("Min in child 1 is: %d\n", p1);
}
else {
pid1 = fork();
if (pid1 == 0) {
wait(NULL);
for(i=N/4;i<=((N/2)-1);i++)
{
arr2[i]=arr[i];
}
p2 = arr2[0];
for (i=0;i<m1;i++)
{
if (arr2[i] < p2)
{
p2 = arr2[i];
temp[1]=p2; }
}
printf("Min in child 2 is:%d\n", p2);
}
else {
pid2 = fork();
if (pid2 == 0) {
for(i=N/2;i<=(3*(N/4)-1);i++)
{
arr3[i]=arr[i];
}
p3 = arr3[0];
for (i=0;i<m1;i++)
{
if (arr3[i] < p3)
{
p3 = arr3[i];
temp[2]=p3; }
}
printf("Min in child 3 is:%d\n", p3);
}
else {
pid1 = fork();
if (pid1 == 0) {
wait(NULL);
for(i=(3*(N/4));i<=N;i++)
{
arr4[i]=arr[i];
}
p4 = arr4[0];
for (i=0;i<m2;i++)
{
if (arr4[i] < smallest)
{
p4 = arr4[i];
temp[3]=p4;
}
}
printf("Min in child 4 is:%d\n", p4);
}
else {
wait(NULL);
int i,min,temp[15];
min = temp[0];
for(i=0; i<4; i++)
{
if(temp[i] < min)
{
min = temp[i];
}
}
printf("The Minimum number of entered sequence is %d:", min);
}
}
}
}
return 0;
}
Результат должен быть C1 как 1, c2 как 2, c3 как 3, c4 как 4, когда массив 1,2,3,4, как взятый и родительский как 1. Но фактическим было c1 как 1, c2, c3, c4 и parent дает несколько случайных значений (например, адрес).