Как исправить вывод значения мусора при использовании функции fork () несколько раз?как мы можем использовать fifo вместо - PullRequest
0 голосов
/ 02 февраля 2019

Я получаю значение мусора при использовании функции fork () несколько раз, так или иначе не могу сохранить результаты.Вы можете помочь мне найти ошибку?или как-нибудь иначе, как fifo?

Я создал 4 дочерних процесса и 1 родительский процесс, чтобы найти минимальное число в массиве из 5 частей, например, array [] = {1, 2, 3, 4}, child 1 должен вернуть 1, child 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 дают некоторые случайные значения (например, адрес).

...