如何将EXCLE与类似execvpe的va_列表一起使用?
我使用的glibc版本没有如何将EXCLE与类似execvpe的va_列表一起使用?,c,exec,C,Exec,我使用的glibc版本没有execvpe功能。然而,对于我正在尝试做的事情,我需要确切的功能。用户将传入一个参数列表,它是我要运行的linux命令(及其参数列表)。下面是它的外观: foo.c int main(int argc, char *argv[], char *envp[]) { char * newenvp[] = ...; execvpe(argv[1], &argv[1], newenvp); } 示例用法 foo echo -e "Hello Worl
execvpe
功能。然而,对于我正在尝试做的事情,我需要确切的功能。用户将传入一个参数列表,它是我要运行的linux命令(及其参数列表)。下面是它的外观:
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]);
}
这不太可能,因为变量参数的数量是在编译时确定的,但是空终止数组的大小可以在运行时确定。请注意,在调用
execvp
之前更改环境变量与缺少的execvpe
函数不同。具体来说,如果新环境改变了路径
变量,那么execvp
可能会执行不同的程序<在切换环境之前,code>execvpe始终搜索当前的PATH
变量。