안녕하세요, 저는이 코드가 실패한 부분을 이해하는 데 문제가 있습니다. execvpe (grep)가 실행되는 경우에는 실패합니다 (Console : "Grep Error").실행하는 두 명의 어린이 ls -la | grep using pipes
을 Heres 코드 :
int main(int argc, char *argv[]){
printf("filter.c\n");
int fd[2];
pid_t ls,grep;
if(argc<3){
printf("Bitte 2 Argumente angeben <Verzeichnis> <Suchmuster>");
exit(-1);
}
char verzeichnis[256];
char suchmuster [256];
char kind [256];
strcpy(verzeichnis,argv[1]);
strcpy(suchmuster ,argv[2]);
if(pipe(fd)<0){
printf("Pipe fehlgeschlagen\n");
return -1;
}
if((ls=fork())==-1){
//fehler
printf("Fork ls fehlgeschlagen\n");
exit(-1);
} else if(ls==0){
//kind
printf("\nChild1 laueft(ls)\n");
if(dup2(fd[1],STDOUT_FILENO)==-1){//dupliziert fd[1]
printf("Dup failed(ls)\n");
return -1;
}
close(fd[0]);
close(fd[1]);
char *argu[]={"-la",verzeichnis,NULL};
if(execvpe("bin/ls",argu,NULL)==-1){//EXECVE
printf("ls error");
return -1;
}
return -1 }
if((grep=fork())==-1){
//fehler
printf("Forken von grep fehlgeschlagen\n");
return -1;
} else if(grep==0){
//children2
printf("Child 2 lauft (grep)\n");
if(dup2(fd[0],STDIN_FILENO)==-1){
printf("dup2 fd[0] fehlgeschlagen\n");
return -1;
}
close(fd[0]);
close(fd[1]);
char *argu[]={"bin/grep",suchmuster,NULL};
if(execvpe("bin/grep",argu,NULL)==-1){
printf("Grep error");
return -1;
}
return -1;
}
close(fd[0]);
close(fd[1]);
while(wait(NULL)>0);//while()
return 0;
// exit(0);
}
그래서 내가 거기 추측은 문제 작성 및 또는 파이프로 /부터 읽고 있습니다. 아무도 내 문제를 알고 있습니까? :/
: 따라서 계정으로 모든 것을 촬영하고는 부모 프로세스의 환경
는grep
및ls
사본을 줄 괜찮을 것이라고 가정하여, 이것은 내가 당신의 간부 호출에 제안하는 일반적인 형식입니다 코드가 어디에서 실패했는지 판단하는 데 중요한 정보는 * 실패 *하는 방법입니다. 해결하려는 문제의 성격은 정확히 무엇입니까? –
it "Grep error"를 반환하므로 거기에 있어야합니다 .. – Felix
/디렉토리에서 프로그램을 실행하지 않는 한 grep에 적절한 경로를 추가해야합니다. ''/ bin/grep "' – Gerhardh