在UNIX中使用C列出环境variables

有没有办法枚举环境variables和检索值使用C?

看看environ全局变量。

 extern char **environ; 

它可能在unistd.h中定义(请看上面的environ (5)手册页)。

这是我写的一个小小的代码演示:

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

以下是如何使用它:

 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) 

环境信息可以作为一个额外的参数传递给main。 我不知道它是否合规,但它肯定能工作(在Ubuntu上测试)。 只需定义额外的参数及其由一个NULL指针终止的char指针数组。 以下将打印出很多。

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

在第127页的书“The Linux Programming Interface”中有一个演示。

清单6-3:显示流程环境—————————————– ——- 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); }