getenv()的全局变量?

Nee*_*ran 2 c glibc

哪个是包含getenv()所有环境变量的全局变量?在什么glibc文件中这个var填充了env vars?

我相信它是**环境但是当我在bash中设置env var时它只输出SSH_AGENT_PID env var.为什么设置SSH_AGENT_PID,为什么它是唯一设置的?


DOCUMENT_ROOT='/foopath/'; export DOCUMENT_ROOT

int main(void)
{
extern char **environ;
printf("%s\n", *environ); // outputs: SSH_AGENT_PID=2822
}

el.*_*ado 6

char **environis NULL-terminated字符串数组,所以你应该尝试:

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

换句话说,environ[0]是指向第一个env变量,environ[1]指向第二个等的指针.environ数组中的最后一个元素是NULL.

  • 通常由``#include <unistd.h>``而不是``extern char**environ``实现.该变量由glibc导出,并在``glibc // posix/environ.c``中声明. (2认同)