如何获取C程序本身设置的所有环境变量?

时间:2014-02-03 00:29:41

标签: c linux bash gcc

我正在编写一个使用system()函数设置环境变量的C程序。

是否有任何集合可以提供由C程序设置的环境变量?我需要在C程序中使用该集合。

2 个答案:

答案 0 :(得分:2)

在Linux和类似系统中,当您运行进程(例如执行C程序)时,该进程是创建它的进程的子进程(通常是命令行shell)或桌面/ GUI管理器)。创建过程是父进程。子进程中设置的任何“环境变量”都不会影响父进程。

子进程可以使用getenv检查自己的环境变量。

如果子进程使用system或其他例程创建自己的子进程,则在该“孙子”进程中创建的任何环境变量都不会影响其父进程(我们的第一个子进程)。

程序为另一个进程提供环境变量的两种常用方法是:

  • 程序可以创建自己的子进程,并指定要在子进程中创建的环境变量,与exec*等各种execle例程一样。
  • 程序将环境变量的设置写入stdout或另一个流,协作进程读取这些设置并相应地设置自己的环境变量。一个例子是在Bourne类型的shell中使用命令eval `ssh-agent -s`。此命令告诉shell执行命令ssh-agent -s,然后评估该命令的输出,就好像它是命令一样。

答案 1 :(得分:1)

根据我的知识,没有标准化的方法来访问所有环境变量,但几乎所有系统都支持使用第三个参数声明main函数,然后它将接收以NULL结尾的字符串数组,这些字符串反映了整个环境:

int main(int argc, char **argv, char **envp)
{
    char **p;

    for(p = envp; *p != NULL; p++)
        printf("%s\n", *p);
    return(0);
}

那应该打印所有环境变量。