Question

J'ai la méthode ci-dessous, et elle définit correctement la valeur de ret sur 0 (indiquant le succès dans setenv), mais lorsque je vérifie que cette variable d'environnement est réellement définie, elle est absente. Pourquoi cela se produirait-il?

 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);                          
     }
Était-ce utile?

La solution

Votre fonction présente des fuites. La page de manuel de setenv dit:

  

Cette fonction crée des copies des chaînes désignées par leur nom et leur valeur

Donc, vous n’avez pas à les copier vous-même avant de les y passer.

Exécutez-vous votre programme comme cela depuis le shell?

./a.out FOO 42

Eh bien, la variable d'environnement sera définie pour le processus ainsi exécuté (a.out) et sera héritée des processus qu'il a lancés. Mais cela ne ne fera pas de bulles & "; dans le shell qui a exécuté set. C’est aussi la raison pour laquelle les commandes telles que export ou <=> sont intégrées au shell plutôt que de véritables programmes. Commander & Quot; aide à exporter & Quot; en bash.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top