1.背景介绍,系统分层,环境变量

本文介绍了操作系统的概念,强调其管理硬件和软件资源的作用,并详细阐述了环境变量的定义、分类、添加方法以及如何查看和修改环境变量。还讨论了环境变量在进程中的作用和常见环境变量如PATH的应用。此外,提到了main函数的环境变量参数以及相关函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是操作系统

        管理计算机硬件资源和软件资源的一款系统软件

        简称OS

        操作系统通过驱动程序管理者计算机的硬件资源

        通过系统调用和用户进行交互

        在很多书籍中,对操作系统层次的描述也有类型下图的描述

环境变量

什么是环境变量

        1.每个进程都有一张自己的环境变量表,表中的每个条目都是形如“键=值”形式的环境变量。

        2.进程可以通过环境变量访问计算机资源

        3.在终端下输入env命令,可以查看环境变量列表

        4.通过echo $name可以查看某个环境变量的值

        全局环境变量:env 可以被 shell的子进程所继承

        局部环境变量:只对当前shell可见

环境变量的添加

        在终端窗口输入FOOD=xigua,表示向当前进程中增加名为FOOD,值为xigua的环境变量,如果环境变量已存在,则更改其值

        强调!在“=”左右不要加空格

环境变量的类别

环境变量分为两类

        一类是可以被子进程继承的,显示在环境变量列表上的

        另一类是不能被子进程继承的,自定义变量

        即:

        全局环境变量:env 可以被 shell的子进程所继承

        局部环境变量:只对当前shell可见

        如果将自定义变量输出到环境变量列表是

        使用命令:export name

        删除环境变量:

        unset name

        常见环境变量

        PATH环境变量

        echo $PATH

         该环境变量所记录的是bash进程对命令的检索路径

        格式为"∵"分割的多个路径。当在bash下输入命令的时候,首先,在第一个路径下找该命令的可执行程序,找到就执行,不再向后找;如果找不到,在第二个路径下找,找到就执行,不再向后找;如果找不到,继续下一个路径。如果到最后一个路径都找不到,就提示该命令不能找到的错误

        比如,当我使用 ./a.out 命令执行时,是告诉bash,我要在 ./ 即当前目录下运行 a.out,但如果不加 ./ ,bash会到PATH里找,找不到则无法运行。

        于是,可以修改PATH的值,在PATH的末尾加上 . ,如上图,则不需要加 ./ ,直接输入 a.out也可以运行

修改方式:

        $PATH=末尾加 . 或者$PATH=$PATH:.

 

        但此时,如果退出端口,重新进入,看PATH,则会发现 . 消失了,因为每一格bash终端打开都对应一个环境变量,即:每个进程都有一张自己的环境变量表,所以打开新的后,原操作不被保留。

解决:

        在home目录下有名为 .bashrc的脚本文件,每次bash进程启动前,都会执行该脚本文件的内容。如果希望环境变量的设置对每个bash进程都有效,可以将环境变量的设置写在该脚本文件中,权限不够打开 .bashrc时 用 vi .bashrc

        执行 source~/.bashrc命令,可以是文件立即生效

环境变量表

        每个进程都有一张独立的环境变量表,环境变量表的内核使用指针数组来维护的

        所谓环境变量表就是一个以NULL指针结束的字符指针数组,

        且每个元素的指针都是char*类型的字符指针,指向一个以空字符结尾的字符串,保存键=值 类型的字符串的地址

每个元素指向 键=值 类型的字符串,即环境变量

        该指针数组的地址保存在全局变量environ中

 

 

//环境变量表
#include<stdio.h>

int main(void){
    extern char** environ;
    for(char** pp = environ;*pp;pp++){
        printf("%s\n",*pp);
    }

    return 0;
}

        可以看到此进程运行时的环境变量表

main函数的第三个参数

        main函数的第三个参数就是环境变量表的起始地址

//环境变量表
#include<stdio.h>

int main(int argc,char* argv[],char* envp[]){
    extern char** environ;
    for(char** pp = envp;*pp;pp++){
        printf("%s\n",*pp); 
    }

    return 0;
}

 

相关函数

        #include

        char *getenv(const char *name);

        功能:根据环境变量名称获取其值

        参数:name 指针 环境变量名称字符串

        返回值:成功返回对应的环境变量的值,失败返回NULL

        int putenv(char *string);

        功能:添加或者修改一个环境变量,不存在则添加,存在则修改

        参数:string是一个形如“键=值”的字符串

        返回值:成功返回0,失败返回非0

        int setnv(const char *name,const char *value,int overwrite);

        功能:添加或者修改环境变量

        参数:name 环境变量的键

        value 环境变量的值

        overwrite 如果环境变量存在,传0,保持原值不变,传非0,表示替换以前的值

        返回值:成功返回0,失败返回非0

        int unsetenv(const char *name);

        功能:删除环境变量

        参数:要删除的环境变量名

        返回值:成功返回0,失败返回非0

        int clearnv(void);

        功能:清理环境变量

        返回值:成功0,失败非0

//环境变量相关操作函数
#include<stdio.h>
#include<stdlib.h>
//封装函数,用来输出当前进程所有的环境变量
void penv(char** pp){
    printf("环境变量表---------------------------\n");
    while(*pp){
        printf("%s\n",*pp++);
    }
    printf("-------------------------------------\n");
}

int main(void){
    extern char** environ ;
    printf("PATH=%s\n",getenv("PATH"));
    putenv("FOOD=tieguodundae");
    penv(environ);
    
    setenv("CITY","beijing",0);
    penv(environ);
    setenv("CITY","harbin",0);//0  不覆盖以前的内容
    penv(environ);
    setenv("CITY","harbin",1);//非0  覆盖以前的内容
    penv(environ);

    unsetenv("CITY");
    penv(environ);

    clearenv();// environ --> NULL;
    penv(environ);
    return 0;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值