1. 命令行参数
大家平时在写主函数时基本是无参的,但其实是有参数的,先介绍前两个参数。
int main(int argc, char* argv[])
第二个参数是指针数组,第一个参数是该数组的个数,我们先来写
一段代码来看看指针数组里面是什么。
1 #include <stdio.h>2 3 int main(int argc,char* argv[])4 {5 for(int i = 0; i < agrc; i++)6 printf("argv[%d]: %s\n",i,argv[i]);7 return 0; 8 }
很明显,里面存放的就是我们输入的命令行,这种模式大家有没有很熟悉,没错,就是我们linux的指令,所以指令也是以命令行参数的形式实现的。
2.环境变量
在我们语言层面也有变量的概念,其实是很相似的。因为变量的本质就是开辟一块空间,给这个空间填充内容和取名字。环境变量的本质也就是操作系统开辟的一块空间。
环境变量是具有特定作用的,我们来举个例子。
我们平时执行我们写的一个程序都要带上./,但为什么执行系统的指令就不需要呢?这是因为PATH这个环境变量存放着操作系统搜索可执行程序的路径。我们用echo $变量名
来查看一下PATH
如果我们想使自己写的程序也能像系统程序一样,根据上面,有两个思路,第一是将自己的程序放到上面任意一个路径中,第二是改变PATH的内容,将自己程序的路径添加上去。
env
指令可以查看所以环境变量
还有种方式也可以查看环境变量,就是main函数的第三个参数,要求以NULL结尾
#include <stdio.h>int main(int agrc,char* agrv[],char* env[]){int i;for(i = 0;env[i];i++)printf("%s\n",env[i]); return 0;}
用第三方变量也可以获取
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。
export
指令可以让用户自己创建环境变量
环境变量又叫全局环境变量,因为它会被所有后代进程所继承。
与环境变量相对的一个概念叫本地变量,本地变量只在本次登陆有效。定义的本地变量使用env
命令看不到,要使用set
命令。unset
删除变量。