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

Posted 浅墨浓香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第5章 进程环境_环境表和环境变量相关的知识,希望对你有一定的参考价值。

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章 进程环境_环境表和环境变量的主要内容,如果未能解决你的问题,请参考以下文章

进程终止,环境表和环境变量操作

第5章 进程环境_进程资源限制

第5章 进程环境_进程结构(task_struct)

第5章 进程环境_非局部跳转

第9章 Shell基础_Bash的运算符及环境变量配置文件

第 5 章 shell编程_课后题