2014-01-05 3 views
1

Я пытаюсь научиться программированию, и я не понимаю, почему я не могу получить ребенка 2, чтобы печатать привет. Я также закрыл оба конца для чтения и записи для родителя, потому что я не хочу, чтобы родитель общался. Буду признателен за любую оказанную помощь.2 child process не отображает сообщение

int main() 

{ 

    int fd[2]; 

    pid_t child_pid, child_pid1; 


if (pipe(fd) < 0) 
{ 
    printf("Pipe error"); 
} 

child_pid = fork(); // child 1 
if (child_pid != 0) 
{ 
    printf("im child 1");  
    dup2 (fd[1], STDIN_FILENO); 
    printf("greetings"); 


    child_pid1 = fork(); //child 2 
    if (child_pid1 != 0) 
    { 
     printf("im child 2"); 
     dup2(fd[0], STDOUT_FILENO); 
     printf("hello"); 

    } 

    else if (child_pid1 > 0) //Parent Code 
    { 
     close (fd[0]); 
     close (fd[1]); 

    } 
} 

return 0; 

    } 

ответ

0

Ваша первая статья if неверна.

child_pid = fork(); // child 1 
if (child_pid != 0) 
{ 
    printf("im child 1");  
} 

Это не ребенок, а родитель. Если это ребенок, то pid будет 0, только у родителя у вас есть child_pid != 0.

То же самое происходит во втором предложении if.

В обоих случаях вы должны сделать if(child_pid == 0), если вы хотите, чтобы этот код выполнялся в дочернем процессе.

+0

Я пробовал это, но он не работает – user3159107

+0

Вы также должны удалить вызовы 'dup2'. – Devolus

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