Listar variables de entorno con C en UNIX

¿Hay una manera de enumerar las variables de entorno y recuperar valores usando C?

Eche un vistazo a la variable global del environ .

 extern char **environ; 

Puede definirse en unistd.h (eche un vistazo a la página de manual de environ (5) arriba).

Aquí hay una pequeña demostración de código que escribí:

 #include  extern char **environ; int main() { for (char **env = environ; *env; ++env) printf("%s\n", *env); } 

Aquí está cómo usarlo:

 matt@stanley:~/Desktop$ make enumenv CFLAGS=-std=c99 cc -std=c99 enumenv.c -o enumenv matt@stanley:~/Desktop$ ./enumenv ORBIT_SOCKETDIR=/tmp/orbit-matt SSH_AGENT_PID=1474 TERM=xterm SHELL=/bin/bash ... (so forth) 

La información del entorno se puede pasar como un parámetro adicional a main. No sé si es compatible o no, pero definitivamente funciona (probado en Ubuntu). Simplemente defina el argumento adicional y es una matriz de punteros de caracteres terminados por un puntero NULL. Lo siguiente imprimirá el lote.

 #include  int main(int argc, char *argv[], char *envp[]) { int index = 0; while (envp[index]) printf("%s\n", envp[index++]; } 

Hay una demostración en el libro “La interfaz de progtwigción de Linux” en la página 127.

Listado 6-3: Visualización del entorno de 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); }