execl()查找命令c

时间:2013-12-13 15:29:56

标签: c linux find exec

我想在shell中执行find命令,只打印* .c文件 然后返回带有文件的字符串并将其打印到stdout。 我正在使用管道来做到这一点。当我尝试跑步时,我总是得到find failed: No such file or directory

我认为问题在于道路。 如果我想打印下载文件夹中存在的所有* .c文件,我应该给它的路径是home/username/Downloads

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char ** argv){
   int fds[2];
   char buffer[4096];

   if(pipe(fds) == -1){
      perror("pipe creation failed");
      exit(1);
   }

   switch (fork()){

    case 0://child
       close(fds[0]);
       execl("usr/bin/find","find","home/username/Downloads", "-name \"*.c\" -print0",NULL);
       perror("find failed");
       exit(20);
       break;

      case -1: //fork failure
       perror("fork failure");
       exit(1);

      default: //parent
       close(fds[1]); //close stdin so only can do stdout
       int size= read(fds[0],buffer, 4096);
       printf("%s",buffer);
   }

   exit(1);
}

2 个答案:

答案 0 :(得分:2)

在usr / bin / find前面缺少一个前导斜杠,所以只有在工作目录为/

时才执行查找

答案 1 :(得分:1)

我建议将单独的参数作为单独的参数传递:

    execl("/usr/bin/find", "find", 
      "/home/username/Downloads", 
      "-name",
      "*.c", /* As no shell is invoked no quotation marks are needed to protect the *. */
      "-print0",  
      (char *) NULL);