在UNIX中用C列出环境变量

在UNIX中用C列出环境变量,c,unix,environment-variables,C,Unix,Environment Variables,是否有方法使用C枚举环境变量并检索值?查看全局变量 extern char **environ; 它可以在中定义(查看上面的environ(5)手册页) 下面是我编写的一个小代码演示: #include <stdio.h> extern char **environ; int main() { for (char **env = environ; *env; ++env) printf("%s\n", *env); } 环境信息可以作为额外参数传递给ma

是否有方法使用C枚举环境变量并检索值?

查看全局变量

extern char **environ;
它可以在中定义(查看上面的
environ(5)
手册页)

下面是我编写的一个小代码演示:

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

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

环境信息可以作为额外参数传递给main。我不知道它是否兼容,但它肯定能工作(在Ubuntu上测试)。只需定义额外的参数及其由空指针终止的字符指针数组。以下将打印出该批次

#include <stdio>

int main(int argc, char *argv[], char *envp[])
{
  int index = 0;
  while (envp[index])
    printf("%s\n", envp[index++];
}
#包括
int main(int argc,char*argv[],char*envp[]
{
int指数=0;
while(环境[索引])
printf(“%s\n”,envp[index++];
}

在第127页的《Linux编程接口》一书中有一个演示

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

它没有在unistd.h中定义,或者如果是,您的系统不符合POSIX。如果您想使用它,POSIX要求您显式声明
extern char**environ;
。@R,+1。至少在我的系统上,如果设置了
\u use\u GNU
,它只在
unistd.h
中声明,这表明它是一个扩展。(FWIW,
\uuuu environ
,也是一个扩展,无条件声明)@R..:在POSIX 2008标准之前,您是正确的;从那时起,您采取了明智的步骤要求它。它是唯一一个在系统标题中没有声明的变量。我所知道的唯一奇怪之处是。抱歉;我站在正确的位置。我已经详细阅读了POSIX的以前版本,但还没有时间阅读POSIX2008。@Jonathan,不知道这个
semun
的事情。很可怕。实际上,这在大多数Unice上都有效,但POSIX没有指定它。使用
extern char**environ;
。Jonathan回应了我的另一条评论,从POSIX 2008开始,它现在是unistd.h的一部分;保存索引变量。我只是通过意外读取argv的末尾发现了这一点。显然,即使源代码中没有该参数,它也在那里。
#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);
}