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查找我没有看到的内容?
答案 0 :(得分:1)
更改
char * para[] = {"find", "./", "*.c", NULL};
是
char * para[] = {"find", "./", "-name", "*.c", NULL};
来自man find
:
-name 模式
文件名的基础(带有前导目录的路径) 删除)匹配shell模式模式。因为领先 删除目录,考虑匹配的文件名 -name 永远不会包含斜杠,因此
-name a/b
会 从不匹配任何东西(你可能需要使用-path)。