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

时间:2011-10-01 01:16:55

标签: c linux unix 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);
}

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

1 个答案:

答案 0 :(得分:7)

使用execvp(3)代替execv(3)execvpexeclp分别与execvexecl完全相同,只是在$PATH环境变量中搜索可执行文件(有关详细信息,请参见手册页)