首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水管和叉子的麻烦

水管和叉子的麻烦
EN

Stack Overflow用户
提问于 2012-04-07 12:25:44
回答 1查看 189关注 0票数 1

我正在制作一个程序来搜索文件并将其结果发送给其他命令,比如管道。当我运行程序nothing happens.The问题时,我认为是子程序等待父程序停止在SO缓冲区中写入以启动读取。这就是它发送给stdout的内容,以及管道应该发送给另一个命令的内容。

代码语言:javascript
复制
    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

我不明白问题出在哪里。

代码语言:javascript
复制
     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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-07 13:57:57

顺便说一下,没有理由复制argv[]数组。而不是

代码语言:javascript
复制
   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);

你也可以

代码语言:javascript
复制
   execvp(argv[5],argv+5);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10054473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档