有没有办法枚举环境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); }