2016-05-19 3 views
0

Я пытаюсь создать 2 дочерних процесса и подключить их к трубе, но что-то не так с моим кодом.с использованием fork дважды - странное поведение

int des_p[2]; 
if(pipe(des_p) == -1) { 
    perror("Pipe failed"); 
    exit(1); 
} 
if((this->procId = fork())==0){ //filter for only the SON process to pass 
    close(STDOUT_FILENO); //closing stdout 
    dup(des_p[1]);  //replacing stdout with pipe write 
    close(des_p[0]); //closing pipe read 
    close(des_p[1]); //closing pipe write 

    execvp(op1, argsp1); 
    perror("execvp failed"); 
    exit(1); 
} 
if(this->procIdSecondary = fork() == 0)   //creating 2nd child, also a filter for only the SON process to pass 
{ 
    close(STDIN_FILENO); //closing stdin 
    dup(des_p[0]);  //replacing stdin with pipe read 
    close(des_p[1]); //closing pipe write 
    close(des_p[0]); //closing pipe read 

    execvp(op2, argsp2); 
    perror("execvp failed"); 
    exit(1); 
} 
else 
{ 
     cout <<"pid=" << this->procIdSecondary<<endl; 

} 

close(des_p[0]); 
close(des_p[1]); 

`

я получаю PID = 0

как это возможно?

+3

Приоритет оператора. Добавьте круглые скобки вокруг назначений в условиях if. –

ответ

0

Ваша проблема является оператором старшинство в этом if заявлении

if(this->procIdSecondary = fork() == 0) 

this->procIdSecondary получает присваивается результат сравнения. Добавьте круглые скобки, как в первом if.

Смежные вопросы