Salut a tous.
Je suis arrivé a faire la première de cet exercice mais pas la deuxième.
Lorsqu'un programme C démarre , son environnement est automatiquement copié dans un tableau de chaines de caractères . Ce tableau est disponible dans une variable globale environ , a déclarer ainsi en début du programme principal:
extern char ** ;
la routine getenv() déclarée permet d'afficher l'ensemble des variables d'environnement
1.Écrire un programme C qui permet d'afficher l'ensemble des variables d'environnement d'un programme ainsi que leur valeurs
2. Écrire un programme en shell bash qui permet d'obtenir le même résultat
Pour la première question voila ma solution :
Mon programme variables_environnement.c s’appuie sur la fonction putenv() pour affecter une
nouvelle variable d'environnement MA_VARIABLE, avec le texte saisi. Il vérifie ensuite sa valeur
à l’aide de la fonction getenv() (C’est une fonction en plus de ce qui a été demander). Enfin une boucle sur le tableau environ affiche l'ensemble des variables d'environnement.
Le résultat de ce programme est le suivant :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 /* ------------------------- */ /* variables_environnement.c */ /* ------------------------- */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> /* variable globale externe */ extern char **environ ; main() { int i=0 ; char c,saisie[30],ma_var[30]; /* saisie du contenu de la variable */ printf("Contenu de la variable:") ; while((c=getchar())!='\n') saisie[i++]=c ; saisie[i]='\0'; /* mise en forme de la chaine */ /* MA_VARIABLE=texte_saisie */ strcpy(ma_var,"MA_VARIABLE=") ; strcat(ma_var,saisie) ; /* positionnement de la variable */ putenv(ma_var) ; /* consultation de la variable */ printf("MA_VARIABLE: %s\n",getenv("MA_VARIABLE")) ; /* affichage de toutes les variables */ printf("--- liste des variables ---\n") ; i=0; while (environ[i]!=NULL) printf("%s\n",environ[i++]) ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $ variables_environnement Contenu de la variable: texte de la variable MA_VARIABLE: texte de la variable --- liste des variables --- PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin SHELL=/bin/ksh USER=lery TERM=xterm LANG=fr LOGNAME=lery HOME=/home/lery MA_VARIABLE=texte de la variable
La liste des variables est en réalité plus longue. Je l’ai écourtée afin de simplifier.
La variable ajoutée apparaît avec la valeur saisie. À la sortie du programme, la
saisie de la commande « echo $MA_VARIABLE » affiche une ligne vide. Cela indique que cette variable n'existe plus. La variable a été créée dans l'environnement du processus fils (l'exécution du programme variables_environnement). Elle est inexistante dans celui du processus père, le shell :
mais pour la deuxième (en bash ) je bloque
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ echo $MA_VARIABLE $
Merci.
Partager