-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";
}
_ "신속하게 도와 줄 수 있습니까?"_ 사이트의 목적이 아닙니다. 미안합니다. –
아무도 자신의 코드를 들여 쓰기조차 할 수없는 사람을 돕기를 원할 것입니다. 따라서 실제로 읽을 수 있습니다. 코드를 다른 사람들이 읽을 수 있도록하기 위해 낭비하고 싶지 않은 경우, 왜 누군가가 시간을 낭비해서 그것을 알아 내야합니까? –
하위 프로세스에서 생성 한 파이프는 상위 프로세스에서 사용할 수 없습니다. 두 프로세스간에 통신을 원할 경우, 파이프를 만들기 전에 * 포킹해야합니다. –