• 【Linux】进程概念 —— 环境变量


    目录

    一.概念

    二.性质

    三.实操

    0.常见的环境变量

    1.查看环境变量的方法

    2.设置环境变量

    3.环境变量的组织方式

    4.在程序中打印环境变量的三种方式

    四.main函数的前两个参数

    1.本质是什么

    ​2.具体怎么用


    一.概念

    环境变量一般指在操作系统中来指定操作系统运行环境的一些参数

    如:C/C++程序在链接动静态库的时候,这些库的路径在哪里,我们是不需要担心的

    如:在Linux下输入指令,本质就是在运行进程,而我们在运行自己的进程时是需要带路径的,指令则直接输入即可,这都是因为在系统中有环境变量导致的,系统根据环境变量自动的就去找到了路径

    以下的一些操作用环境变量PATH举例

    二.性质

    环境变量具有全局性

    全局性的本质:

    子进程的环境变量都是从父进程来的

    所有的环境变量都会被子进程继承

    main函数的父进程是bash,而bash中的是从操作系统中来的

    更形象的可以理解为,以bash为一颗多叉树向下由子进程继承,则所有进程都会有

    普通变量和环境变量的差别:

    本质就是环境变量具有全局性,而普通变量没有

    普通变量 = 局部变量

    环境变量 = 全局变量

    定义普通变量:普通变量名=内容

    定义环境变量:export 环境变量名=内容

    三.实操

    0.常见的环境变量

    PATH:指定命令的搜索路径

    HOME:指定用户的主工作目录

    SHELL:当前shell它的值通常是/bin/bash

    1.查看环境变量的方法

    echo $环境变量名称

    例如:echo $PATH

    PATH环境变量用冒号做分隔,每一个冒号后都是一个新的路径

    env:查看所有环境变量

    set:查看所有变量

    2.设置环境变量

    这里设置环境变量既有设置也有修改

    环境变量的设置与修改都仅限于本次登录

    因为环境变量具有全局性,每一个子进程都会继承父进程的环境变量,所以如果只是修改当前的环境变量目录的话,也就是只修改了bash,每一次登录就都意味着操作系统要新创建一个bash,bash的环境变量也是由操作系统继承下来的,所以如果想要永久修改环境变量的话,就要修改系统的配置文件。(但是强烈不建议这么做,以防污染原来的系统)

    设置新的环境标量一定要有export,修改的话可有可无

    export 环境变量=要配置的环境变量

    例如:export PATH=$PATH:新增路径

    3.环境变量的组织方式

    以环境变量表的形式组织起来,最终每个进程都会收到一张环境表

    环境变量表的本质就是一个字符指针数组,这是一个数组,数组的每个元素存放的是字符串首地址,最终这个字符串以\0结尾,并且这个字符指针数组结尾是NULL

    4.在程序中打印环境变量的三种方式

    通过main函数中的三个参数之一:char*env[]就可以打印出环境表

    1. int main(int argc, char* argv[], char*env[])
    2. {
    3. printf("---------------------------\n");
    4. //查看当前所有的环境变量
    5. int i = 0;
    6. for(; env[i]; i++)
    7. {
    8. printf("%s\n",env[i]);
    9. }
    10. printf("---------------------------\n");
    11. return 0;
    12. }

    或者通过系统的environ二维指针来打印出环境表

    1. #include
    2. int main()
    3. {
    4. extern char** environ;
    5. int i = 0;
    6. for(; environ[i]; i++)
    7. {
    8. printf("%s\n",environ[i]);
    9. }
    10. return 0;
    11. }

    查看某一个环境变量:getenv函数

    1. #include
    2. #include
    3. int main()
    4. {
    5. printf("%s\n",getenv("PATH"));
    6. return 0;
    7. }

    四.main函数的前两个参数

    1.本质是什么

    char argc与char* argv[]是命令行参数

    1. #include
    2. int main(int argc, char* argv[])
    3. {
    4. int i = 0;
    5. for(; i < argc; i++)
    6. {
    7. printf("argc:[%d] argv:[%s]\n",i ,argv[i]);
    8. }
    9. return 0;
    10. }

    本质:

    2.具体怎么用

    1. #include
    2. #include
    3. int main(int argc, char* argv[])
    4. {
    5. if(argc != 2)
    6. {
    7. printf("必须带有选项\n");
    8. return 0;
    9. }
    10. if(strcmp(argv[1],"-a")==0)
    11. {
    12. printf("这是功能一\n");
    13. }
    14. else if(strcmp(argv[1],"-b")==0)
    15. {
    16. printf("这是功能二\n");
    17. }
    18. return 0;
    19. }

     这本质就是我们在Linux命令行下输入的命令,每个命令带不同的选项执行不同的功能

  • 相关阅读:
    深入浅出PyTorc——进阶训练技巧
    【分布式计算:原理、算法和系统】第三章 逻辑时间【待补全】
    图神经网络驱动的交通预测技术:探索与挑战
    【Proteus仿真】【Arduino单片机】多功能数字时钟设计
    Java设置JSON字符串参数编码
    车间生产实施精益化可以给企业带来哪些效益?
    基于simulink的单相光伏系统并网储能控制仿真
    华为gre带验证key案例
    亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章
    Gradio 最快创建Web 界面部署到服务器并演示机器学习模型,本文提供教学案例以及部署方法,避免使用繁琐的django
  • 原文地址:https://blog.csdn.net/Hello_World_213/article/details/126198450