18

我们可以像这样在 C 中获取环境变量:

extern char **environ;
int main(int argc, char *argv[])
{
    int count = 0;

    printf("\n");
    while(environ[count] != NULL)
   {
         printf("[%s] :: ", environ[count]);
         count++;
   }

   return 0;
}

但是环境的定义在哪里?我在 unistd.h 中找不到。它是如何工作的?

4

4 回答 4

14

environ在 Glibc 源文件中定义为全局变量posix/environ.c

于 2012-05-18T09:07:00.670 回答
4

您是否尝试过将 envp 声明为 main 的参数?

int main (int argc, char *argv[], char *envp[])

http://www.gnu.org/software/libc/manual/html_node/Program-Arguments.html#Program-Arguments

于 2012-05-18T08:35:51.807 回答
1

男人:

此变量必须在用户程序中声明,但在头文件 unistd.h 中声明,以防头文件来自 libc4 或 libc5,并且如果它们来自 glibc 并定义了 _GNU_SOURCE。

于 2012-05-18T08:35:50.290 回答
0

在 POSIX 系统上,标识符

extern char **environ;

不必在任何标题中定义。正如@triclosn对这个问题的回答中所述,“这个变量必须在用户程序中声明......”

根据POSIX 7环境变量

环境变量的值是一个字符串。对于 C 语言程序,一个称为环境的字符串数组应在进程开始时可用。该数组由外部变量environ指向,定义为:

extern char **环境;

没有 POSIX 要求environ在任何头文件中声明变量,因此在符合 POSIX 的系统上,如果您希望在代码中声明它,它只是可用的。

于 2021-09-24T17:39:18.307 回答