2016-10-07 11 views
-2

쉘, 파이프 및 포크를 구현 중입니다. 기본적으로 동일한 부모의 두 자식 프로세스간에 메시지를 전달합니다. 개별 명령의 작업이지만 파이프 명령이 작동하지 않습니다. 잘못된 파일 설명자와 같은 오류가 발생합니다. 아무도 이것으로 나를 도울 수 있습니까?stat failed : - : 잘못된 파일 설명자

다음은 제 코드입니다.

/* 포크 (fork) 부모 */

if ((pid = fork()) <0) 

cout<<"fork error"; 

/*이 경우 자식 */

else if (pid == 0) 
{ 

/* child */ 

if(pipe(pipeA)==-1) 

cerr<<"Pipe Creation error"<<'\n'; 

/* Duplicating the output */  

dup2(pipeA[1],1); 

close(pipeA[0]); 

/* Running the first command */ 

if(execvp(*command1,command1)<0) 

{ 

cout<<"error in executing:"<< command<<'\n'; 

} 

} 

/* 아이까지 기다리는 부모가 완료에서 */

if ((pid = waitpid(pid, &status, 0)) < 0) 

cout<<"waitpid error"; 

/* calling method, to create second process and execute it */ 

secondExecute(command2); 

} 

// Second process will be created here 

void secondExecute(char *command2) 

{ 

if ((pid = fork()) <0) 

cout<<"fork error"; 

else if (pid == 0) 

{ 

dup2(pipeA[0],0); 

close(pipeA[1]); 


/* Executing the second process */ 

if(execvp(*args,args)<0) 

{ 

cout<<"couldn't execute:"<< command2<<'\n'; 

} 

} 

if ((pid = waitpid(pid, &status, 0)) < 0) 

cout<<"waitpid error"; 

}  

+0

_ "신속하게 도와 줄 수 있습니까?"_ 사이트의 목적이 아닙니다. 미안합니다. –

+0

아무도 자신의 코드를 들여 쓰기조차 할 수없는 사람을 돕기를 원할 것입니다. 따라서 실제로 읽을 수 있습니다. 코드를 다른 사람들이 읽을 수 있도록하기 위해 낭비하고 싶지 않은 경우, 왜 누군가가 시간을 낭비해서 그것을 알아 내야합니까? –

+0

하위 프로세스에서 생성 한 파이프는 상위 프로세스에서 사용할 수 없습니다. 두 프로세스간에 통신을 원할 경우, 파이프를 만들기 전에 * 포킹해야합니다. –

답변

0

fork에 전화하기 전에 파이프를 만들어야합니다. 부모와 자식이 각각 pipe 인 경우 각각 다른 파이프가 생성됩니다. 두 프로세스간에 공유 파이프가 필요합니다.