如何在execlp之前设置environ?
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
// Tried extern char **environ;
int main (int argc, char *argv[])
{
// Tried environ = -- gives compile error
char** environ =
{
"foo=bar",
"hello=world",
0 // zero byte
};
//environ = ??
execlp("env", "env", (char*)0);
return 0;
}
没有打印foo = bar THX。
答案 0 :(得分:2)
man execlp
和man environ
会有所帮助:
execle()和execvpe()函数允许调用者通过参数envp指定执行程序的环境。 envp参数是一个指向以null结尾的字符串的指针数组,必须由NULL指针终止。其他函数从调用过程中的外部变量environ获取新过程映像的环境。
environ
在unistd.h
中声明为extern
,您需要在调用execlp()
之前填充变量。另请注意,environ
中的字符串应采用key=value
;
#include <stdio.h>
#include <unistd.h>
// declare environ as extern
extern char** environ;
int main (int argc, char *argv[])
{
// populate environ
environ[0] = "foo=bar";
environ[1] = NULL;
// call execlp
execlp("/usr/bin/env", "", (char *)0);
return 0;
}