課題で、配管の実装を依頼されました。私はそうすることができましたが、私が遭遇している問題は、コマンドを入力するときです
ls | grep 'a.out'
出力は
a.out
a.out
しかし、私がするとき
ls | トイレ
出力は 1 回だけです。誰でもコードの間違いを指摘できますか?. コードは次のとおりです。
void execute_pipe(char **argv,char **args)
{
int pfds[2];
pid_t pid,pid2;
int status,status2;
pipe(pfds);
if ((pid = fork()) < 0) {
printf("*** ERROR: forking child process failed\n");
exit(1);
}
if ((pid2 = fork()) < 0) {
printf("*** ERROR: forking child process failed\n");
exit(1);
}
if (pid==0) {
close(1);
dup(pfds[1]);
close(pfds[0]);
close(pfds[1]);
if(execvp(argv[0],argv)<0){
printf("**error in exec");
}
}
else if(pid2==0){
close(0);
dup(pfds[0]);
close(pfds[1]);
close(pfds[0]);
if(execvp(args[0],args)<0){
printf("**error in exec");
}
}
else{
close(pfds[0]);
close(pfds[1]);
while (wait(&status) != pid) ;
while (wait(&status2) != pid2) ;
}
}
迷子のプリントがなく、ディレクトリに a.out が 1 つしかないことは確かです。