假设我想生成一个进程并运行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程序,我该如何实现呢?
答案 0 :(得分:7)
使用execvp(3)
代替execv(3)
。 execvp
和execlp
分别与execv
和execl
完全相同,只是在$PATH
环境变量中搜索可执行文件(有关详细信息,请参见手册页)