如何将execv用于位置未知的命令?
问题描述:
说我要生成一个进程并运行execv
像ls
执行命令,那么这是我要做的事:如何将execv用于位置未知的命令?
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程序的情况下,我该如何实现它?
答
使用execvp(3)
而不是execv(3)
。 execvp
和execlp
的工作方式与execv
和execl
完全相同,只是它们搜索可执行文件的$PATH
环境变量(有关完整详细信息,请参阅手册页)。
+1 Dang,打我吧。 –