Frage

Ich habe das Verfahren unten, und setzt sie korrekt den Ret-Wert auf 0 (zeigt Erfolg in setenv), aber wenn ich überprüfen, um zu sehen, ob diese Umgebungsvariable tatsächlich eingestellt wird, ist es nicht vorhanden. Warum sollte dies geschehen?

 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);                          
     }
War es hilfreich?

Lösung

Ihre Funktion Lecks. Die Manpage von setenv sagt:

  

Diese Funktion macht Kopien der Saiten, auf den Namen und den Wert

Sie brauchen also nicht selbst kopieren, bevor sie es vorbei.

Haben Sie ausführen Ihr Programm wie folgt aus der Schale?

./a.out FOO 42

Nun, dann wird die Umgebungsvariable für den Prozess so ausgeführt wird gesetzt (a.out) und auf die Prozesse von ihrem eingeleitete vererbt werden. Aber es wird nicht „sprudeln“ in die Schale, die a.out ausgeführt. Das ist auch der Grund, warum Befehle wie set oder export sind Shell-Einbauten, anstatt echte Programme. Zur Kasse "Hilfe export" in bash.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top