我怎样才能像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" 

有一种解决方法,以取代execvpeexecle

+0

这是不可能的,因为在编译时确定的变量参数的数量,但可以在运行时确定一个空终止数组的大小。 – 2013-04-22 15:37:52

我相信我已经解决了我自己的问题。使用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