Отправка случайно сгенерированного значения из дочернего процесса в родительский процесс - PullRequest
0 голосов
/ 10 октября 2019

Я написал код, который генерирует случайное число в дочернем процессе, используя rand () ... Мне нужно отправить это случайное значение в родительский процесс, используя pipe (). когда я использую read () и write (), значения, полученные родителем, равны 0, а не случайному числу.

Я не получаю никакой ошибки, просто выводим значение Получено: 0.

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#include<fcntl.h>


int main ()
{

    pid_t Cpid;
    int fd[2];  

    int rVal;



    //pid will store the value of fork()
    Cpid = fork();
    pipe(fd);       

    if( Cpid == 0) 
    {

        //CHILD
        rVal = rand()%100;
    ;
//this is in child process
    close (fd[0]);
    rVal = rand()%100;
    write(fd[1], &rVal,sizeof (rVal));
    close (fd[1]);

        printf(" Child Pid : %d sending random value : %d to parent : %d\n", 
    getpid(), rVal, getppid());


    }


    else if(Cpid != 0 )
    {

        printf (" Parent PID : %d\n", getpid());
        //this is the parent process
        close(fd[1]);
        read(fd[0], &rVal, sizeof(rVal));
        printf(" value recieved is : %d\n", rVal);
        close(fd[0]);
        printf(" value recieved by parent : %d\n", rVal);

    }



    return 0;


}

1 Ответ

0 голосов
/ 10 октября 2019

Код должен настроить трубу перед разветвлением детей. В противном случае родитель и дети будут использовать разные каналы и не смогут общаться друг с другом.

int main ()
{

    pid_t Cpid;
    int fd[2];  

    // Create the pipe BEFORE forking.
    pipe(fd);       

    //pid will store the value of fork()
    Cpid = fork();

    if( Cpid == 0) 
        .. REST OF CODE ~~~
...