如何将execv用于其位置未知的命令?

Noh*_*sib 4 c unix linux exec

假设我想生成一个进程并运行execv以执行命令,就像ls这样我就是这样做的:

char * const parm[] = { "/usr/bin/ls","-l" , NULL };
if ((pid = vfork()) == -1)
    perror("fork error");
else if (pid == 0)
{
    execv("/usr/bin/ls", parm);
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我在这里硬编码了ls命令所在的位置(/usr/bin/ls).现在假设我不知道特定命令在哪里并且想要执行它然后我该怎么做呢?我知道在常规shell PATH中查找变量以实现相同,但是在使用C程序的情况下execv如何实现它?

Ada*_*eld 7

execvp(3)而不是execv(3). execvp并且分别与它们execlp完全相同,除了它们在环境变量中搜索可执行文件(有关完整详细信息,请参见手册页).execvexecl$PATH