extern char ** environ的定义在哪里?

时间:2012-05-18 08:32:12

标签: c linux

我们可以像这样在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中找不到。它是如何工作的?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

人:

  

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