簡體   English   中英

基本shell實施中的管道

[英]Piping in a basic shell implementation

在一項作業中,我們被要求實施管道。 我能夠這樣做,但是遇到的問題是當我輸入命令時

ls | grep'a.out'

那么輸出是

但是當我這樣做

ls | 廁所

輸出只有一次。 誰能指出代碼中的錯誤? 代碼如下:

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。

您在父進程和第一個子進程中運行第二個fork 如果pid不為零,則只應執行第二個派生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM