自学内容网 自学内容网

Linux中的环境变量及main函数参数详解

目录

Linux中的环境变量

常见环境变量 PATH :

和环境变量相关的命令

通过系统调用获取或设置环境变量

getenv

putenv

新增环境变量

进程切换:

main函数参数

命令行参数


Linux中的环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

常见环境变量 PATH :

指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash

which ls
/usr/bin/ls
zhangsan@ubuntu:~/practice-using-ubuntu/20240920$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped

echo $PATH(系统的默认(维护可执行程序)搜索路径)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

只有在PATH下的程序才能被直接执行。

查看主机名和用户名

zhangsan@ubuntu:~$ echo $LOGNAME
zhangsan
zhangsan@ubuntu:~$ echo $HOSTNAME
ubuntu

和环境变量相关的命令

1. echo: 显示某个环境变量值

2. export: 设置一个新的环境变量

export xxx
export VAL="xxx"

将本地变量设为环境变量

3. env: 显示所有环境变量

env | grep myval

过滤出指定的环境变量

4. unset: 清除环境变量-> 需要一定的时间

5. set: 显示本地定义的shell变量和环境变量

通过系统调用获取或设置环境变量

getenv

SYNOPSIS
       #include <stdlib.h>

       char *getenv(const char *name);

#include<stdio.h>
#include<stdlib.h>

#define USER "USER"
int main()
{
    char* who=getenv(USER);
    printf("user: %s\n",who);
    return 0;
}

 user环境变量最大的意义是,可以标识当前使用Linux的用户。

#define USER "USER"
#define MY_ENV "myval"
int main()
{
    char* myenv=getenv(MY_ENV);
    if(NULL==myenv)
    {
        printf("%s,not found\n",MY_ENV);
    }
    printf("%s=%s\n",MY_ENV,myenv);
    //printf("user: %s\n",who);
    return 0;
}

可以观察export  myval 前后的效果。

环境变量本来是定义给bash的,但会被子进程继承下去。->为了适应不同的应用场景。‘’

本地变量只会在当前进程(bash)内有效。

环境变量中有空格时应加上" "

环境变量是在bash内维护的,环境变量变化时,Shell会自动调整PWD的值。

#define MYPWD "PWD"
printf("%s\n",getenv(MYPWD));

putenv

更改或添加环境变量。

新增环境变量

export PATH=$PATH:/xx/xx/xx/xx

进程切换:

进程切换指的是要进行进程上下文的保护,当进程在恢复运行的时候要进行上下文保护(保护的是寄存器里的数据而不是寄存器本身)。

在任何时刻,寄存器里的数据,只是属于当前进程,寄存器被所有进程共享,但是进程里的数据,是每个进程各自私有的上下文数据

cd ~  
cd $HOME

 ~最终会被解释为HOME环境变量。

main函数参数

命令行参数

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

argc:程序名+参数个数

argv:程序名+参数 

argv数组通常以null结束。

env:中存环境变量,最后同样以NULL结尾。

printf("%s\n",getenv("PATH"));

SYNOPSIS
       extern char **environ;

for(int i=0;__environ[i];++i)
        printf("%d:%s\n",i,*(__environ+i));


原文地址:https://blog.csdn.net/2301_77479435/article/details/142421415

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