2011-10-20 3 views
2

가능한 중복 :
Pipe in C UNIX shell는 C에서 파이프를 생성

I 2 자식 프로세스 사이의 배관을 만들려 하였다 자식 1 파이프에 대한 입력 및 출력을 닫는다는 자식 2 출력을 닫고 입력을 받아들입니다 :

 pipe(&fd[0]);        //Create a pipe 
     proc1 = fork(); 

     //Child process 1 
     if (proc1 == 0) 
     { 
      close(fd[0]);       //process1 doenst need to read from pipe 
      dup2(fd[1], STD_OUTPUT); 
      close(fd[1]); 
      execvp(parameter[0], parameter);  //Execute the process 
     } 

     //Create a second child process 
     else 
     { 
      //Child process 2 
      proc2 = fork(); 
      if (proc2 == 0) 
      { 
       close(fd[1]); 
       dup2(fd[0], STD_INPUT); 
       close(fd[0]); 
       execvp(parameter2[0], parameter2); 
      } 
      //Parent process 
      else 
      { 
      waitpid(-1, &status, 0);   //Wait for the child to be done 
      } 
     } 

howev 어, 어딘가에서 잘못 가고 있는데 정확히 어디에서 오류가 없는지, 논리 오류가 더 많은지 알지 못합니다.

답변

2

파이프가 뒤쪽에 있습니다. fd[1]은 쓰기 용이고, fd[0]은 읽기 용입니다.

사이드 참고 :pipe(&fd[0]);은 (눈에) pipe(fd);은 동일합니다 ... 조금 이상한 보이지만, 분명.

+1

그래서 dup2 (fd [1], STD_OUTPUT)는 다음과 같아야합니다. dup2 (fd [1], STD_INPUT)? – user1003749

+0

예, 미리 정의 된 매크로 인'STDIN_FILENO'와'STDOUT_FILENO'를 사용할 수 있습니다. –