Putenv() et getenv()

andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013 - 2 nov. 2011 à 19:17
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013 - 4 nov. 2011 à 15:17
Bonjour,
Je viens de remarquer que setenv n'était pas POSIX et je voudrais donc utiliser putenv.
J'ai donc reproduit une fonction ou il y a exactement le code à l'interieur de ce main :
http://www.lsv.ens-cachan.fr/~parrenne/Cours/code/td2_putenv.c
dans la fonction, quand je fais des getenv la variable est bonne mais quand j'en sors et que je fais un getenv, elle n'existe plus.
Voila si vous pouvez m'aider.. :/
Merci d'avance.

11 réponses

BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
3 nov. 2011 à 10:29
Hello,
Vu le nombre de topics que tu ouvres, j'imagine que tu n'as toujours pas résolu ton souci.
dans la fonction, quand je fais des getenv la variable est bonne mais quand j'en sors et que je fais un getenv, elle n'existe plus.

Quand tu sors de quoi exactement?
Avec le code ci-dessous, getenv() me retourne bien la bonne valeur.
#include 

int main(void)
{
  putenv("CODES=source");
  std::cout<<"Voici la valeur: "<< getenv("CODES") << std::endl;
  system("pause");
}

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
3 nov. 2011 à 10:54
J'ai résolu mes problémes et mon shell marche sauf que je dois tenir en compte les variables d'environnement.
/home/andoid/Bureau: bab="ls"
j'ai fait un putenv("bab=ls") qui fonctionne et getenv("bab") me retourne "ls" mais si le shell revient à l'etat initial et que je tape $bab il fait rien voici le code


void Gestion_V_Environnement(char* commande)
{


char **tab=malloc((strlen(commande)+1)*sizeof(char*));
char** recup;
char* variable;
char concat[TAILLE];
tab=Pipes(commande,"="");


strcpy(concat,"");
strcat(concat,tab[0]);
strcat(concat,"=");
strcat(concat,tab[1]);
putenv(concat);
variable=getenv(tab[0]);

if(variable==NULL)
printf("la variable n'existe pas\n");
else
executer(variable);
printf("\nLe positionnement de getenv=%s \n",variable);



free(tab);


}
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
3 nov. 2011 à 11:44
Je ne comprends pas ce que tu veux dire. Ta variable d'environnement sera là tant que ton programme tourne. Mais si tu le fermes, tu fermes ton environnement courant et donc ta variable n'est plus là.
Je ne sais pas comment ça se passe sous Linux mais il me semble que sous Windows, si tu veux agir sur les variables d'environnement système, il faut modifier la base de registres.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
3 nov. 2011 à 11:44
La modification de putenv() est locale au processus.
Donc quand le programme se ferme, les variables reviennent à la normale.
Pour que la modif reste, utilise system() et balance la commande linux qui modifie la variable.
ex:
system("export PATH=$PATH:/home/user/mes_prog");

Attention, le programme devra être lancé avec les droits root !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
3 nov. 2011 à 12:18
Inutile de reposter 18 fois la même question... Sache que ta question est vue, même si elle n'est pas en début de liste.
Les membres y répondent quand ils peuvent (et si ils peuvent). J'ai répondu à ta question ici, avant de m'apercevoir que tu avais reposé la question à de nombreuse reprise. J'ai effacé ces doublons.
http://www.cppfrance.com/forum/sujet-VARIABLE-ENVIRONNEMENT_1552913.aspx

Merci à l'avenir de ne pas reposer plusieurs fois la même question et d'attendre patiemment que l'on te réponde !

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
3 nov. 2011 à 12:23
Au faite c'est le même titre mais pas le contenu la premiere question j'ai pu le resoudre tout seul
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
3 nov. 2011 à 12:30
pour buno:
le but est que si je tape lister="ls" puis entré le shell
t'affiche la valeur de $lister
/home/andoid/Bureau/projet: lister="ls
/home/andoid/Bureau/projet:$lister
resultat:
minish.c
minish.h
..
...
.....
nimportekoi.c

pour LA_Tupac:
le prof nous interdit d'utiliser system

mon code arrive a creer la variable lister mais mon shell revient pour attendre $lister il m'affiche rien
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
3 nov. 2011 à 16:23
le prof nous interdit d'utiliser system

Je te l'ai dit, putenv ne modifie pas les variable directement (pour des questions de sécu bien sûr).
La question est donc: es-tu obligé d'utiliser les variables système? Si oui tu n'a pas d'autres alternatives...désolé
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
3 nov. 2011 à 21:29
ok pour ne pas me faire degommer par le prof je pense que je vais utiliser un fichier
ce sera mieux
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
4 nov. 2011 à 00:43
Oui je pense que ton prof n'a pas voulu te poser de pièges sado.
je pense que je vais utiliser un fichier
ce sera mieux

Oui! sous linux il est d'usage d'utiliser des fichiers pour stocker les infos.
Sous windows, il est d'usage d'utiliser la base de registre.
Choisis ton camp soldat
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
4 nov. 2011 à 15:17
c'est ce que je vais faire tkt et merci pour tout
0