浅墨浓香

想要天亮进城,就得天黑赶路。

导航

第5章 进程环境(3)_环境表和环境变量

Posted on 2017-01-27 22:38  浅墨浓香  阅读(440)  评论(0编辑  收藏  举报

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;
}