使用execv

时间:2016-10-03 05:05:01

标签: c linux find exec

if (pid == 0) {
    char * para[] = {"find", "./", "*.c", NULL};
    execv("/usr/bin/find", para);
    printf("execu failed: %s\n", strerror(errno)); //ls -l -R
    exit(-1);
}

当我尝试使用execv()中的find时,我收到了消息./: ‘*.c’: No such file or directory。当我运行没有execv(find...) arugument的*.c时,我得到了我的程序编译的文件夹的内容,包括许多.c文件./test.c, ./rock_paper_scissors.c, ./main.c等。当我在终端中直接运行命令find ./ *.c时,我得到了预期的结果,该目录中的所有.c文件。

我是否需要使用某种不同的方法来通过exec查找我没有看到的内容?

1 个答案:

答案 0 :(得分:1)

更改

char * para[] = {"find", "./", "*.c", NULL};

char * para[] = {"find", "./", "-name", "*.c", NULL};

来自man find

  

-name 模式

     

文件名的基础(带有前导目录的路径)        删除)匹配shell模式模式。因为领先                 删除目录,考虑匹配的文件名       -name 永远不会包含斜杠,因此-name a/b会     从不匹配任何东西(你可能需要使用-path)。