Почему моя оболочка вокруг setenv () не работает?

StackOverflow https://stackoverflow.com/questions/662466

  •  20-08-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top