2014-01-05 2 views
1

프로그래밍을 배우려고하는데 왜 자식 2가 인사를 할 수 없는지 이해할 수 없습니다. 또한 부모가 의사 소통하기를 원하지 않기 때문에 부모를위한 파이프의 읽기 및 쓰기 끝을 모두 닫았습니다. 어떤 도움이라도 대단히 감사합니다.2 개의 자식 프로세스가 메시지를 표시하지 않습니다.

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

관련 문제