我怎样才能像execvpe一样使用exea和va_list?
问题描述:
我使用的glibc版本没有execvpe
函数。但是,我需要确切的功能来实现我正在尝试的功能。用户将传入一个参数列表,这是他们的linux命令供我运行(使用它的参数列表)。这里是什么样子:我怎样才能像execvpe一样使用exea和va_list?
foo.c的
int main(int argc, char *argv[], char *envp[])
{
char * newenvp[] = ...;
execvpe(argv[1], &argv[1], newenvp);
}
使用示例
foo echo -e "Hello World.\n"
有一种解决方法,以取代execvpe
与execle
?
答
我相信我已经解决了我自己的问题。使用execvpe
的解决方法是使用setenv
,然后使用execvp
。我相信功能是相同的:
int main(int argc, char *argv[], char *envp[])
{
setenv("MYVAR", "MYVALUE", 1);
/* More calls to setenv can be used if needed. */
execvp(argv[1], &argv[1]);
}
+0
请注意,在调用'execvp' _is之前更改环境变量与缺少'execvpe'函数不同。具体来说,如果新环境改变'PATH'变量,那么'execvp'可能最终执行一个不同的程序。在执行环境切换之前,'execvpe'总是搜索当前的'PATH'变量。 – 2014-09-18 19:20:52
这是不可能的,因为在编译时确定的变量参数的数量,但可以在运行时确定一个空终止数组的大小。 – 2013-04-22 15:37:52