Domanda

Ho il metodo seguente e imposta correttamente il valore ret su 0 (che indica il successo in setenv), ma quando controllo per vedere se questa variabile di ambiente è effettivamente impostata, è assente. Perché dovrebbe succedere?

 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);                          
     }
È stato utile?

Soluzione

La tua funzione perde. La manpage di setenv dice:

  

Questa funzione crea copie delle stringhe indicate da nome e valore

Quindi non è necessario copiarli da soli prima di passarli.

Esegui il tuo programma in questo modo dalla shell?

./a.out FOO 42

Bene, allora la variabile d'ambiente verrà impostata per il processo così eseguito (a.out) e verrà ereditata dai processi avviati da essa. Ma non & Quot; rimbalza & Quot; nella shell che ha eseguito set. Questo è anche il motivo per cui comandi come export o <=> sono integrati nella shell piuttosto che programmi reali. Acquista & Quot; aiuta a esportare & Quot; in bash.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top