在UNIX中使用C列出环境变量

Ste*_*pan 14 c unix environment-variables

有没有办法枚举环境变量并使用C检索值?

Mat*_*ner 28

看看environ全局变量.

extern char **environ;
Run Code Online (Sandbox Code Playgroud)

它可能被定义unistd.h(看看environ (5)上面的手册页).

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

#include <stdio.h>
extern char **environ;

int main()
{
    for (char **env = environ; *env; ++env)
        printf("%s\n", *env);
}
Run Code Online (Sandbox Code Playgroud)

以下是如何使用它:

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)
Run Code Online (Sandbox Code Playgroud)

  • @R ..:直到POSIX 2008标准,你是对的; 从那时起,[`<unistd.h>`](http://www.opengroup.org/onlinepubs/9699919799/functions/environ.html)采取了明智的措施.它是系统头中没有声明的唯一变量.我所知道的唯一古怪的是[`union semun`](http://www.opengroup.org/onlinepubs/9699919799/functions/semctl.html). (4认同)
  • 它没有在unistd.h中定义,或者如果是,您的系统不符合POSIX.POSIX要求您显式声明`extern char**environ;`如果您想使用它. (2认同)

tor*_*rak 9

环境信息可以作为额外参数传递给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++];
}
Run Code Online (Sandbox Code Playgroud)