Comment obtenir la liste de toutes les variables d'environnement en C et/ou C++?
Je sais que getenv
peut être utilisé pour lire une variable d'environnement, mais comment les répertorier toutes?
Les variables d'environnement sont mises à la disposition de main()
en tant qu'argument envp
- un tableau de chaînes terminé par null:
int main(int argc, char **argv, char **envp)
{
for (char **env = envp; *env != 0; env++)
{
char *thisEnv = *env;
printf("%s\n", thisEnv);
}
return 0;
}
#include<stdio.h>
extern char **environ;
int main() {
int i = 1;
char *s = *environ;
for (; s; i++) {
printf("%s\n", s);
s = *(environ+i);
}
return 0;
}
Je pense que vous devriez vérifier environ
. Utilisez "man environ".
Votre compilateur peut fournir des extensions non standard à la fonction principale qui fournissent des informations supplémentaires sur les variables d'environnement. Le compilateur MS et la plupart des versions d'Unix ont cette version de main:
int main (int argc, char **argv, char **envp)
où le troisième paramètre est l'information sur la variable d'environnement - utilisez un débogueur pour voir quel est le format - probablement une liste de pointeurs de chaîne terminée par null.
int main(int argc, char **argv, char** env) {
while (*env)
printf("%s\n", *env++);
return 0;
}
int main(int argc, char* argv[], char* envp[]) {
// loop through envp to get all environments as "NAME=val" until you hit NULL.
}
LPTCH WINAPI GetEnvironmentStrings(void);
http://msdn.Microsoft.com/en-us/library/ms683187%28VS.85%29.aspx
EDIT: ne fonctionne que sur Windows.
Dans la plupart des environnements, vous pouvez déclarer votre principal comme:
main(int argc,char* argv[], char** envp)
envp contient toutes les chaînes d'environnement.
Si vous utilisez un système d'exploitation Windows, vous pouvez également appeler GetEnvironmentStrings()
qui renvoie un bloc de chaînes terminées par null.