题
我有下面的方法,它正确地设置保留值设置为0(表示成功SETENV),但是当我检查,看看是否该环境变量实际设定,这是不存在的。为什么会这样发生?
void Class::mysetenv(char* a, char* b)
{
if(a==0 || b==0)
return;
int ret = setenv(strdup(a), strdup(b), 1);
printf("ret: %d %s %s\n", ret, a, b);
}
解决方案
您功能泄漏。 setenv
的手册页表示:
此功能使通过名称和值
指向的字符串的副本
所以,你不必给他们自己将它们传递给它之前复制。
你从shell中运行你的程序是这样?
./a.out FOO 42
好了,那么环境变量将被用于这样执行(a.out
)的处理中设置,并且被继承到所发射的处理。但它不会“冒泡”成执行a.out
壳。这也是为什么诸如set
或export
命令shell内置,而不是真正的节目的原因。结帐“帮助出口”在bash。
不隶属于 StackOverflow