嘿,我有一个问题,了解这个代码失败的地方。 它可能会失败执行execvpe(grep)(控制台:“Grep Error”)。两个孩子执行ls -la | grep使用管道
继承人的代码:
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错误”,所以它必须在那里.. – Felix
除非你从/目录运行你的程序,你应该添加正确的路径到grep。尝试'“/ bin/grep”' – Gerhardh