Linux----进程概念(下)(一半)

Posted 4nc414g0n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux----进程概念(下)(一半)相关的知识,希望对你有一定的参考价值。

7. 环境变量

①概念

环境变量(environment variables)

  1. 一般是指在操作系统中用来指定操作系统运行环境的一些参数
  2. 我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找
  3. 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

在windows中也有环境变量,快捷键win+r可以直接打开的都是在path里添加好绝对路径


②Linux常见的环境变量

注意:程序,命令,指令,可执行程序… … 都是一个概念

1.PATH

指定命令的搜索路径

当我们运行我们已编译好的可执行程序时有一个./表示当前路径
如果我们不带./系统会报错command not find
但系统命令ls cd 等就可以,这是因为系统在PATH(辅助系统进行指令查找)的帮助下能够找到
有两种方案

  1. 将自己的可执行程序添加到系统路径下
    命令:cp 程序 /usr/bin/
  2. 将当前的路劲添加到PATH
    用指令:PATH=$PATH:路径

注意:环境变量是在用户登录时从配置文件加载的,所以方法2在重启后不会保留
环境变量的信息在bashrc里面

2.HOME

指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

3.SHELL

当前Shell,它的值通常是/bin/bash常见shell还有sh,ksh,csh等

4.HISTSIZE

可以保存历史命令的最多条数

③其他

1.环境变量的函数

头文件<stdlib.h>

函数功能
char *getenv(const char *name)获取环境变量
int setenv(const char *name, const char *value, int overwrite)设置环境变量

2.本地变量和export

本地变量:只能在当前shell命令行解释器内被访问,不能被子进程继承
环境变量:具有“全局属性”,可以被子进程继承
export 本地变量将本地变量导为环境变量

3.set和env

env只能显示环境变量
set可以显示环境变量和本地变量

4.内建命令

内建命令:shell程序内部的一个函数
echo export
shell执行的命令的是内建命令时就直接调用内建命令的方法(这也是为什么echo export可以使用本地变量),不是时会再去调用fork()创建子进程子进程不可继承本地变量

5.环境变量组织方式以及如何获取环境变量

每个程序都会收到一张环境表,环境表environ是一个字符指针数组,每个指针指向一个以’\\0’结尾的环境字符串


获取方式

  1. libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明
    例如:
int main(int argc, char *argv[])

	extern char **environ;
	for(int i=0; environ[i]; i++)
		printf("%s\\n", environ[i]);
	return 0;

  1. 通过命令行参数(详见下面

8. 命令行参数

main函数有三个参数:int argc, char *argv[], char *env[]
Linux中的指令有那么多选项也是通过命令行参数来实现的

  1. int argc和char *argv[]:argv[]指针数组元素个数是argc

有如下代码

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

	for(int i=0;i<argc;i++)
	        printf("%s\\n",argv[i]);

  1. 第一个元素是 ./test
  2. 第二三四个是接下来的dd ff gg
  3. 最后一个元素是NULL

  1. char *env[],接收环境变量
int main(int argc, char *argv[], char *env[])

	for(int i=0; env[i]; i++)
		printf("%s\\n", env[i]);
	return 0;

以上是关于Linux----进程概念(下)(一半)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 下进程与线程的基本概念

《Linux从0到99》六 进程概念 下

《Linux从0到99》六 进程概念 下

Linux下进程以及相关概念理解

Linux----进程概念(下)

操作系统 Linux操作系统编程开发