¿Cómo obtengo la lista de todas las variables de entorno en C y/o C++?Imprimir todas las variables de entorno en C/C++
Sé que getenv
se puede utilizar para leer una variable de entorno, pero ¿cómo puedo enumerarlas todas?
¿Cómo obtengo la lista de todas las variables de entorno en C y/o C++?Imprimir todas las variables de entorno en C/C++
Sé que getenv
se puede utilizar para leer una variable de entorno, pero ¿cómo puedo enumerarlas todas?
Las variables de entorno se ponen a disposición main()
como argumento envp
- una matriz terminada nula de cuerdas:
int main(int argc, char **argv, char **envp)
{
for (char **env = envp; *env != 0; env++)
{
char *thisEnv = *env;
printf("%s\n", thisEnv);
}
return 0;
}
¿Funciona esto también en Windows? – andrewrk
Si trabaja en Windows, y si tiene un compilador, ¿por qué no solo lo ejecuta y ve? Háganos saber cómo va. –
Aunque es ampliamente compatible (no conozco ningún compilador que no lo admita), no se garantiza el uso del argumento "envp" como main, solo "argc" y "argv". "envp" también lo convierte en local en main(). Una solución más portátil es observar el entorno externo (global) que proporcionan casi todos los compiladores, así como las funciones getenv() y setenv() que se supone que garantizan la integridad de la manipulación del entorno del proceso. . Muchas implementaciones también proporcionan una función putenv(), pero esta función puede no garantizar la integridad del entorno. (Consulte los documentos, se está quedando sin espacio para comentarios). –
int main(int argc, char* argv[], char* envp[]) {
// loop through envp to get all environments as "NAME=val" until you hit NULL.
}
Creo que deberías comprobar environ
. Use "hombre medio".
http://www.opengroup.org/onlinepubs/007908799/xsh/environ.html – ephemient
Su compilador puede proporcionar extensiones no estándar para la función principal que proporciona información variable de entorno adicional. El compilador de MS y la mayoría de las variantes de Unix tienen esta versión de principal:
int main (int argc, char **argv, char **envp)
donde el tercer parámetro es el entorno de información variable - utilizar un depurador para ver lo que el formato es - probablemente un nulo lista de punteros de cadena terminada.
LPTCH WINAPI GetEnvironmentStrings (void);
http://msdn.microsoft.com/en-us/library/ms683187%28VS.85%29.aspx
EDIT: sólo funciona con Windows.
Si está ejecutando un sistema operativo Windows, también puede llamar al GetEnvironmentStrings()
, que devuelve un bloque de cadenas con terminación nula.
En la mayoría de los entornos, puede declarar su principal como:
main(int argc,char* argv[], char** envp)
envp contiene todas las cadenas de entorno.
#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;
}
Hay un error en su ejemplo. La primera var de entorno se imprime dos veces. –
Usted es 100% correcto. He actualizado el valor inicial de i a 1 de 0. – user1602017
La ventaja de esta solución es que no necesita estar en main(). Funciona bien si lo pones en medio de un programa grande y complicado. ¡¡Gracias!! –
int main(int argc, char **argv, char** env) {
while (*env)
printf("%s\n", *env++);
return 0;
}
la forma de llamar a la env utilizando el sistema (env)? – Vijay