Почему моя оболочка вокруг setenv () не работает? - PullRequest
3 голосов
/ 19 марта 2009

У меня есть метод ниже, и он правильно устанавливает значение 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);                          
     }

1 Ответ

12 голосов
/ 19 марта 2009

Ваша функция протекает. В справочной странице setenv написано:

Эта функция делает копии строк, на которые указывают имя и значение

Так что вам не нужно копировать их самостоятельно, прежде чем передавать их ему.

Выполняете ли вы такую ​​программу из оболочки?

./a.out FOO 42

Что ж, тогда переменная окружения будет установлена ​​для выполняемого таким образом процесса (a.out) и будет унаследована запускаемым ею процессам. Но он не будет "пузыриться" в оболочку, которая выполнила a.out. По этой же причине такие команды, как set или export, являются встроенными оболочками, а не реальными программами. Оформить заказ "Справка по экспорту" в bash.

...