Почему моя оболочка вокруг setenv () не работает?
Вопрос
У меня есть приведенный ниже метод, и он корректно устанавливает значение ret равным 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
говорит:
Эта функция создает копии строк, на которые указывают имя и значение
Таким образом, вам не нужно копировать их самостоятельно, прежде чем передавать ему.
Выполняете ли вы свою программу подобным образом из командной оболочки?
./a.out FOO 42
Что ж, тогда переменная окружения будет установлена для выполняемого таким образом процесса (a.out
), и быть унаследованным от запущенных им процессов.Но он не будет "всплывать" в оболочку, которая выполнялась a.out
.Это также является причиной, по которой такие команды, как set
или export
являются встроенными оболочками, а не реальными программами.Оформите заказ "справка по экспорту" в bash.