我正在编写一个使用system()函数设置环境变量的C程序。
是否有任何集合可以提供由C程序设置的环境变量?我需要在C程序中使用该集合。
答案 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);
}
那应该打印所有环境变量。