文章目录
- 1.进程的内存空间布局
- (1)内核空间PCB与用户空间
- (2)用户空间的具体布局
- 2.命令行参数
- 3.环境变量表
- 4.如何访问环境变量表?
- 5.设置环境变量
1.进程的内存空间布局
(1)内核空间PCB与用户空间
- 内核空间PCB
- 用户空间
(2)用户空间的具体布局
2.命令行参数
(1)
- 命令就是可执行文件,紧跟着的参数,各种文件名等:都是命令行参数,向进程进行传递
- eg:ls [参数] <路径或文件名>
ls –l /home - mkdir [参数] <目录名>
mkdir -p /home/xiaokun/src - cp [参数] <源文件路径> <目标文件路径>
cp –r /usr/local/src /root
(2)eg
- mian函数是进程的入口函数,argc:向进程所传递的命令行参数的个数,argv:向进程所传递的命令行参数本身,可以将其当作字符串数组
- 注意:可执行文件名本身也作为命令行本身,传递给进程的命令行参数
- 假如上述代码编译为hello.0,在命令行中执行:
- hello.0 a b c d e
3.环境变量表
- 每个进程都会有自己的环境变量表(该表可以来自shell,也可以来自父进程的参数传递)
- 通过全局的环境指针(environ)可以直接访问环境变量表(字符串数组)
- 环境变量字符串形式为“name=value”, name是环境变量名称, value为环境变量赋值
4.如何访问环境变量表?
- 获取环境变量的方法
直接通过environ变量指针访问环境表
使用getenv函数 - getenv函数用于获取环境变量值
- eg:getenv(PATH),返回的是:PATH=:/bin:/usr/bin\0这个字符串
5.设置环境变量
- 一般不会通过environ变量指针来修改,而是用下面的POSIX API
- 设置环境变量的三种方法:
- putenv函数将环境变量字符串放入环境变量表中;若该字符串已经存在,则覆盖
- setenv:指定环境变量的名称,然后查找对应的环境变量字符串,将name设置为value
- unsetenv