自学内容网 自学内容网

进程第四章:环境变量

1.铺垫

1.1环境变量是系统提供的一组name=value形式的变量,不同的环境变量有不同的用户,通常具有全局属性

1.2多个可执行程序的运行,他们的环境变量的部分数据是不同的,比如说PWD等数据

1.3环境变量里的数据,多为K-V结构(name=value);也就是说找到key,就找到了value

1.4环境变量中存在用户名,用户日志,系统默认路径等信息,为权限的确认做了重要的保障

1.5我们所运行的进程,都是子进程;bash本身在启动的时候,会从操作系统的配置文件中读取环境变量信息;如果创建子进程,子进程会继承父进程的环境变量(系统交给父进程的环境变量)——所以环境变量具有全局属性;

1.6环境变量的传递:一是继承,由父进程传给子进程(所有进程都是操作系统的子进程,所以肯定都能传下去;每个运行的子进程肯定会走这条路;这是默认的);二是参数传递

1.Linux系统程序运行搜索路径

 命令 echo $环境变量名称

echo $PATH       //查看程序运行搜索路径PATH——会看到一堆的路径

echo:打印命令

$: 要输出的变量或文本,这里指变量;

PATH:Linux系统的指令搜索路径;以冒号作为分隔符,一串一串的绝对路径

2.添加路径到环境变量PATH

命令 PATH=$PATH:/home/qk/...        //将自己的环境变量添加到系统中

PATH:是覆盖式写入,必须要把以前的环境变量加上,$PATH必须有

该环境变量会在重启时重新在shell中默认设置,也就是说新添加的环境变量会在重启后消失

 3.查看环境变量

说是系统的环境变量——其实是用户信息及系统资源配置(环境变量及系统对应一系列提信息)

命令 env:查看从系统继承下来的所有的环境变量

此命令可以看到很多信息,比如用户自定义环境变量,系统环境变量,用户名,当前路径记录、编码格式、日志名称等信息;

命令 cd - 其实是执行的cd $OLDPWD

 命令 history:查看历史的bash命令 HISTSIZE=1000最多纪录1000条bash指令

4.新增环境变量

命令: export myvalue=123456        //将myvalue=123456添加到环境变量中

5.删除环境变量

命令:unset myvalue         //删除环境变量myvalue 

 6.本地变量&&内建命令

本地变量由来:需要一些只在bash内部有效的符号,但不需要子进程继承下去,所以有了本地变量的概念

命令 a=20        //a=20会显示在环境变量中,但不会被子进程继承;叫本地变量

命令:set        //显示本地变量(本地定义的shell变量)和环境变量

本地变量只会在本BASH内有效,不会被子进程继承;

 命令分为两种

1.常规命令:通过创建子进程完成

2.内建命令:bash不创建子进程,而是由自己亲自执行,类似于bash调用了自己写的,或者系统提供的函数

内建命令:cd、echo

 7.putenv()函数

#include<stdlib.h>

int putenv(char *sting)        //程序中获取环境变量

string:一个字符串;书写为 name=value

举例

char *string="myvalue=123456";

若环境变量中存在name,则修改value的值;若不存在name,则添加name=value

由此,此函数为覆盖式写入

8.getenv()函数

#include<stdlib.h>

char *getenv(const char *name)        //程序中获取环境变量

参数:是基于K-V模型的;const char *name中的name="环境变量中的key"

环境变量是一个基于K-V(name=value)的;

所以参数char  *name="key";通过getenv()函数来寻找name值,返回value值

9.chdir()函数

#include<unistd.h>

int chdir(const char *path)        //将正在运行的进程的工作目录改变成path中的路径;

10.命令行参数

命令行参数: 

int main(int argc,char *argv[],char *env[])         //主函数带参

char *argv[]命令行参数表——数组的最后一个指针指向为NULL;

char *env[] 环境变量列表——数组的最后一个指针指向为NULL;

如果在main(int argc,char *argv[])函数不写char *env[]参数,那就是空,不会从上级程序的环境变量中拷下来;只能用getenv()函数获取

这两个数组可以使用for循环在程序中打印出来

mian()函数中(进程中)存在两张核心向量表

1.命令行参数表

2.环境变量表

 11.第三方变量environ获取

C语言提供了第三方变量,可以在程序中获取;如下方使用

#include

int main(int argc, char *argv[])

{

        extern char **environ;

        i = 0;

        for(; environ[i]; i++){

        printf("%s\n", environ[i]);

        }

        return 0;

}


原文地址:https://blog.csdn.net/qincjun/article/details/141942534

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!