0

課題で、配管の実装を依頼されました。私はそうすることができましたが、私が遭遇している問題は、コマンドを入力するときです

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 つしかないことは確かです。

4

1 に答える 1

1

親プロセスと最初の子プロセスの両方forkで 2 番目を実行します。がゼロでない場合にのみ、2 番目のフォークを実行する必要があります。pid

于 2012-11-16T13:14:32.800 に答える