在UNIX中用C列出环境变量
是否有方法使用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
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);
}