什么是操作系统
管理计算机硬件资源和软件资源的一款系统软件
简称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;
}