execvpe的便携式替代品
execvpe的便携式替代品,c,linux,libc,C,Linux,Libc,execvpe函数是GNU扩展。如果我希望我的代码可以移植到非gnu libcs,那么如何将execvpe调用更改为可移植 execvp不设置新程序的环境,execlepoth不允许将数组作为参数传递,也不尝试直接从PATH解析可执行文件 Per(加粗矿): 。。。此外,以下变量必须由用户声明(如果要直接使用): extern char **environ; 初始化为指向环境字符串的字符指针数组的指针。argv和environ数组均以空指针终止。终止argv数组的空指针不计入argc中 应用程
execvpe
函数是GNU扩展。如果我希望我的代码可以移植到非gnu libcs,那么如何将execvpe
调用更改为可移植
execvp
不设置新程序的环境,execle
poth不允许将数组作为参数传递,也不尝试直接从PATH
解析可执行文件
Per(加粗矿):
。。。此外,以下变量必须由用户声明(如果要直接使用):
extern char **environ;
初始化为指向环境字符串的字符指针数组的指针。argv
和environ
数组均以空指针终止。终止argv
数组的空指针不计入argc
中
应用程序可以通过将environ
变量指定给指向新环境字符串的字符指针数组,从而在一次操作中更改整个环境。
所以不是
exec...e( ...., myNewEnv );
你能行
extern char **environ;
.
.
.
environ = myNewEnv;
exec...(...);
这个实现是开源的,你可以看看它做什么,然后自己做类似的事情。或者在“musl libc”中,请参见
exec*e()
函数有点多余的语法糖,这就是为什么它们没有被普遍实现的原因。直接设置environ
。构造新的环境数组,而不是将其作为参数传递给exec*e()
函数,只需执行environ=newEnvArray;行政长官…()代码>查看glibc中的实现实际上没有多大帮助,因为其他涉及路径的exec*函数实际上是使用execvpe实现的(因为它更通用)。execvpe确实调用了execve系统调用,但是使用PATH查找可执行文件的代码并不简单。