¿Hay alguna manera de enumerar variables de entorno y recuperar valores usando C?Mostrar variables de entorno con C en UNIX
Respuesta
Eche un vistazo a la variable global environ
.
extern char **environ;
Se podría definirse en unistd.h
(echar un vistazo a la página environ (5)
hombre arriba).
He aquí una pequeña demostración de código que he escrito:
#include <stdio.h>
extern char **environ;
int main()
{
for (char **env = environ; *env; ++env)
printf("%s\n", *env);
}
Así es como se usa:
[email protected]:~/Desktop$ make enumenv CFLAGS=-std=c99
cc -std=c99 enumenv.c -o enumenv
[email protected]:~/Desktop$ ./enumenv
ORBIT_SOCKETDIR=/tmp/orbit-matt
SSH_AGENT_PID=1474
TERM=xterm
SHELL=/bin/bash
... (so forth)
El entorno de la información se puede pasar como un parámetro adicional para principal. No sé si es compatible o no, pero definitivamente funciona (probado en Ubuntu). Simplemente defina el argumento adicional y es una matriz de punteros char terminados por un puntero NULL. Lo siguiente imprimirá el lote.
#include <stdio>
int main(int argc, char *argv[], char *envp[])
{
int index = 0;
while (envp[index])
printf("%s\n", envp[index++];
}
+1: nunca escuché esto antes de – sje397
En la práctica, esto funciona en la mayoría de los equipos, pero no está especificado por POSIX. Use 'extern char ** environ;'. –
Cuando Jonathan respondió a uno de mis otros comentarios, a partir de POSIX 2008 * ahora * es parte de unistd.h. –
Hay una demostración en el libro "La interfaz de programación de Linux" en la página 127.
Listing 6-3: Viendo el entorno del proceso ------------ ------------------------------------ proc/display_env.c
#include "tlpi_hdr.h"
extern char **environ;
int
main(int argc, char *argv[])
{
char **ep;
for (ep = environ; *ep != NULL; ep++)
puts(*ep);
exit(EXIT_SUCCESS);
}
- 1. Acceso a variables de entorno En C++
- 2. Establecer variables de entorno local en C++
- 3. Establecer variables de entorno en C
- 4. Imprimir todas las variables de entorno en C/C++
- 5. Variables de entorno en Python en Linux
- 6. ¿Hay alguna manera de cambiar las variables de entorno de otro proceso en Unix?
- 7. Heredar variables de entorno con GNU Parallel
- 8. MSBuild requiere variables de entorno
- 9. ¿Cómo obtengo y configuro variables de entorno en C#?
- 10. Variables de entorno de Javascript
- 11. Evaluar variables de entorno en una cadena
- 12. Comprobación de variables de entorno
- 13. Configuración de variables de entorno en EngineYard
- 14. Uso de variables de entorno en Monodesarrollo con MonoTouch
- 15. C# en entorno linux
- 16. Leer variables de entorno del archivo en Windows Batch (cmd.exe)
- 17. Cómo leer variables de entorno en Scala
- 18. Variables de entorno en enlaces simbólicos
- 19. Variables de entorno de referencia en web.xml
- 20. Configuración de variables de entorno en Mathematica
- 21. Entorno portátil tipo Unix para Windows
- 22. claves SSH en variables de entorno
- 23. ¿Cuáles son estas extrañas variables de entorno?
- 24. Leer variables de entorno en el archivo persistence.xml
- 25. Obtener variables de entorno en Classic ASP
- 26. Cómo establecer variables de entorno en Python
- 27. Establecer variables de entorno Node.js en WebStorm
- 28. ¿Variables de entorno modificadas mediante programación?
- 29. Obtener variables de entorno usando el código C
- 30. ResolvePath para VB6 - resolver variables de entorno
No está definido en unistd.h, o si lo es, su sistema no es compatible con POSIX. POSIX requiere que declare explícitamente 'extern char ** environ; 'si desea usarlo. –
@R, +1. En mi sistema al menos, solo se declara en 'unistd.h' si' __USE_GNU' está configurado, lo que indica que es una extensión. (FWIW, '__environ', también una extensión, se declara incondicionalmente). –
@R: Sí, lo hice en mi código de ejemplo. –