【发布时间】:2017-05-20 03:24:28
【问题描述】:
嘿,我在理解此代码失败的地方时遇到了问题。 它可能在执行 execvpe(grep) 的地方失败(控制台:“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 错误”,所以它必须在那里..
-
除非你从 / 目录运行你的程序,否则你应该添加正确的 grep 路径。试试
"/bin/grep" -
请改进缩进。代码很难阅读。
-
@Gerhardh /bin/grep 没有解决我之前尝试过这个和其他事情的问题。