Xpoint
   [напомнить пароль]

Создание 3 процессов

Метки: [без меток]
[удл]
2012-12-12 02:23:43 [обр] Виталий[досье]
сообщение промодерировано
Данная программа должна создавать 3 процесса:
1 процесс: p1=n+2
2 процесс: p2=k+5
3 процесс: p3=n+k
родитель: c=p1+p2+p3
n и k вводятся.
Процессы p1,p2,p3 считают правильно, но когда очередь доходит до родителя то он не правильно считает, наверное потому что он не получает значения p1,p2,p3.
s1,s2,s3 - pid'ы потомков.
Скажите, пожалуйста, что я неправильно написал.
Выполняется под Unix.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

void exit_failure(void)
{
  printf("Descendant don't create!\n");
}
int main (void)
{
  int k,n;
  double c,p1,p2,p3;
  printf("Enter k: ");
  scanf("%d",&k);
  printf("Enter n: ");
  scanf("%d",&n);
  pid_t s1,s2,s3;

  s1=fork();
  if(s1==0) //descendant
  {
    p1=n+2;
    printf("des1 p1=%f\n",p1);
    exit(1);
  }
  else if(s1>0) //parent
  {
    s2=fork();
    if(s2==0) //descendant2
    {
      p2=k+5;
      printf("des2 p2=%f\n",p2);
      exit(2);
    }
    else if(s2>0) //parent
    {
      s3=fork();
      if(s3==0) //descendant3
      {
        p3=n+k;
        printf("des3 p3=%f\n",p3);
        exit(3);
      }
      else if(s3>0) //parent
      {
        waitpid(s1,NULL,0);
        waitpid(s2,NULL,0);
        waitpid(s3,NULL,0);
        printf("p1=%f\n",p1);
        printf("p2=%f\n",p2);
        printf("p3=%f\n",p3);
        c=p1+p2+p3;
        printf("Summ: %f\n",c);
        exit(4);
      }
      else 
      {
        atexit(&exit_failure);
      }


    }
    else 
    {
      atexit(&exit_failure);
    }


  }
  else 
  {
    atexit(&exit_failure);
  }

}
спустя 6 часов [обр] Евгений Седов aka KPbIC(0/176)[досье]
Вы правы, родитель не получает значения переменных в потомках, так как каждый процесс работает с собственной копией переменных.
спустя 6 часов [обр] Виталий[досье]
Я пробовал записывать результаты каждого потомка в файл, и потом родитель считывает из этого файла. Но родитель почему то не ждет завершения потомков и считывает из файла соответственно 0.
спустя 1 час 44 минуты [обр] Евгений Седов aka KPbIC(0/176)[досье]
Видов IPC много. Выберите какой-нибудь и правильно реализуйте.
Powered by POEM™ Engine Copyright © 2002-2005