簡體   English   中英

pipe 和叉子的問題

[英]Troubles with a pipe and a fork

我正在制作一個搜索文件並將其結果發送到其他命令的程序,例如 pipe。ls | sort 當我運行程序時沒有任何反應。我認為問題是孩子等待父母停止在 SO 緩沖區中寫入以開始閱讀。 這是它發送到 stdout 的內容,也是 pipe 應該發送到其他命令的內容。

    troneras@troneras-VirtualBox:~/Escritorio/busca.2012$ ./busca . -n . -print
    ./permisos.txt
    ./busca2.c
    ./mmap.pdf
    ./busca3.c~
    ./cuadernoso4.2011b.pdf
    ./busca.c~
    ./busca.c
    ./busca2.c~
    ./busca3.c

我不明白問題出在哪里。


     if(!strcmp(argv[4],"-pipe"))
 {
int pipefd[2];
int pid,dummi;

if (pipe(pipefd)<0){
   perror("pipe");
   exit(1);
}

pid = fork();

if (pid<0){
   perror("fork");
   exit(1); 
}
if (pid == 0){//Child process    
   close(pipefd[1]);//The child is only reading from the pipe
   if(dup2(pipefd[0],0)!=0){perror("dup2");exit(1);}
   close(pipefd[0]);

       char *argumentos[argc-4];
   int j;
   for (j=5;j<argc;j++){
      argumentos[j-5]=argv[j];   
   }         
   argumentos[j-5]= NULL;    

   execvp(argv[5],argumentos);
   perror("execve: ");

}else{ //parent        
   close(pipefd[0]);
   if(dup2(pipefd[1],1)!=1){perror("dup2");exit(1);}
   close(pipefd[1]);

   while(count--){
      if(strcmp(files[count]->d_name,".") && strcmp(files[count]->d_name,"..")){               
         printf("%s/%s\n",argv[1],files[count]->d_name);                       
      free(files[count]);
   }

       wait(&dummi);
}

 }//end pipe                 
 free(files);

順便說一句,沒有理由復制 argv[] 數組。 代替

   char *argumentos[argc-4];
   int j;
   for (j=5;j<argc;j++){
      argumentos[j-5]=argv[j];   
   }         
   argumentos[j-5]= NULL;    

   execvp(argv[5],argumentos);

你也可以這樣做

   execvp(argv[5],argv+5);

暫無
暫無

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

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