【发布时间】:2010-08-13 03:27:24
【问题描述】:
有没有办法使用 C 枚举环境变量和检索值?
【问题讨论】:
标签: c unix environment-variables
有没有办法使用 C 枚举环境变量和检索值?
【问题讨论】:
标签: c unix environment-variables
看看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)
【讨论】:
extern char **environ;。
__USE_GNU,它只会在unistd.h 中声明,这表明它是一个扩展。 (FWIW,__environ,也是一个扩展,被无条件声明)。
<unistd.h> 采取了明智的措施来要求它。它是唯一没有在系统头文件中声明的变量。我所知道的唯一奇怪的东西是union semun。
semun 的事情。吓人。
环境信息可以作为额外参数传递给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++];
}
【讨论】:
extern char **environ;。
《Linux 编程接口》一书第 127 页有一个演示。
示例 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);
}
【讨论】: