Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将EXCLE与类似execvpe的va_列表一起使用?_C_Exec - Fatal编程技术网

如何将EXCLE与类似execvpe的va_列表一起使用?

如何将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

我使用的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 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
变量。