首页 > 代码库 > 第5章 进程环境(3)_环境表和环境变量
第5章 进程环境(3)_环境表和环境变量
3. 环境表
(1)每个进程都有一个独立的环境表(字符指针数组)
(2)初始的环境表继承自父进程
(3)两种访问方式:
①int main(int argc, char* argv[], char* envp[]); //第3个参数
②extern char** environ; //全局变量
4. 环境变量操作函数
(1)getenv:获取环境变量值
头文件 |
#include<stdlib.h> |
函数 |
char* getenv(const char* name); |
返回值 |
指向与name关联的value的指针,若未找到返回NULL |
功能 |
获取环境变量值 |
(2)putenv:将形为name=value的字符串放到环境表中
头文件 |
#include<stdlib.h> |
函数 |
int* putenv(char* str); |
返回值 |
指向与name关联的value的指针,若未找到返回NULL |
功能 |
将形为name=value的字符串,放到环境表中。如果name己经存在,则先删除其原来的定义。 |
(3)setenv:将形为name=value的字符串放到环境表中
头文件 |
#include<stdlib.h> |
函数 |
int* setenv(const char* name, const char* value, int rewrite); |
返回值 |
成功返回0,出错返回非-1 |
功能 |
将name设置为value。如果在环境中name己经存在,那么若rewrite为0,则不删除其现存定义(name不设置为新的value,而且也不出错)。 |
(4)unsetenv:删除指定的环境变量
头文件 |
#include<stdlib.h> |
函数 |
int* unsetenv(const char* name); |
返回值 |
成功返回0,出错返回非-1 |
功能 |
删除name的定义,即使不存在这种定义也不算出错。 |
【编程实验】设置/删除环境变量和显示环境变量表信息
//process_env.c
#include <unistd.h> #include <stdio.h> #include <stdlib.h> //获得环境表方式1 extern char** environ; //全局变量 void show_env(char** env) { int i = 0; char* curr; while((curr = env[i++]) != NULL){ printf("%s\n", curr); } } //main的第3个参数为环境表指针 int main(int argc, char* argv[], char* envp[]) { //利用全局变量获取环境表信息 //show_env(environ); //获得环境表方式2:利用命令行第3个参数envp show_env(envp); //设置环境变量 printf("-----------------------------------------\n"); putenv("CITY=shanghai"); setenv("COMPANY", "horizonStudio", 1); show_env(environ); //删除环境变量 printf("-----------------------------------------\n"); unsetenv("CITY"); show_env(environ); return 0; }
第5章 进程环境(3)_环境表和环境变量