получить значения от ребенка, чтобы использовать его в родительском - PullRequest
0 голосов
/ 24 ноября 2010

я написал код ниже, но последний printf возвращает 0 для sumofall, как я могу получить значения sumoro, sumort и sumorth от child

код:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main()
{
    int array[3][3];
    int sumoro = 0,sumort = 0,sumorth = 0;

    pid_t pid = fork();

if (pid < 0) {
    printf("fork faild");
    exit(1);
}
else {

    if (pid == 0)
    {
        for (int i = 0; i < 3 ; i++) {
            for (int j = 0; j < 3; j++) {
                array[i][j] = rand()%9;
                if (i == 0)
                sumoro += array[0][j];
                if (i == 1) 
                sumort += array[1][j];
                if (i == 2)
                sumorth += array[2][j];
            }
        }
    }
    else {
        waitpid(pid, NULL, 0);
        int sumofall = sumoro + sumort + sumorth;
        printf("sum of all equal : %d ", sumofall);
    }


return 0;

    }
}

Примечание: не обязательно, но если вы можете мне помочь, как я могу заставить rand () каждый раз давать новые числа, потому что я каждый раз замечаю одинаковые значения

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Когда вы форкаете, каждый процесс впоследствии находится в своем собственном пространстве.Нет простого способа перемещать данные назад и вперед - по крайней мере, ничего более простого, чем чтение переменной.Вам нужно использовать какой-либо метод межпроцессного взаимодействия (IPC), например, анонимные каналы (см. Страницу руководства pipe (2)).

Что касается rand (), вам нужно заполнить случайное числогенератор с относительно случайным значением.Простое решение с достаточной случайностью для почти всего, кроме криптографии, дает следующее утверждение один раз в начале вашей программы:

srand (время (NULL));

При этом часы используются для заполнения ГСЧ различными значениями при каждом запуске вашей программы, если только вам не удается запустить ее дважды с одной и той же секундой.

1 голос
/ 24 ноября 2010

В основном, часть, где вы складываете свои значения и где вы их печатаете, находится в разных процессах.

Для rand () вам нужно инициализировать его с помощью seed, по умолчанию он содержит 0, поэтому он всегда дает вам одну и ту же последовательность (как вы видите значения, которые rand дает вам в любом случае?). Обычно это делается для того, чтобы установить время / дату, чтобы они всегда отличались, попробуйте использовать

srand ( time(NULL) );

для этого убедитесь, что #include <time.h>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...