命令行参数
argc是参数个数,argv是指针数组(字符串数组)
#include<stdio.h>
int main(int argc,char* argv[])
{
int i=0;
for(i;i<argc;i++)
{
printf("argv[%d]:%s\n",i,argv[i]);
}
return 0;
}
运行:
命令行参数本质是交给我们程序的不同的选型,用来定制不同的程序功能,命令中会带有很多选项。
这些命令行参数默认输入给父进程bash的,bash把它们变成main的参数,命令行启动的程序都会变成进程,都是bash的子进程,bash内部会自动生成argv表。
环境变量
像我们的指令,不需要带路径 ,但是自己写的要带路径,这是因为系统存在一些全局的设置,会告诉命令行解释器,应该去哪些路径下寻找可执行程序。
系统中很多配置,在我们登录的时候已经加载到bash进程(内存)中了。
查看
echo $PATH
PATH:环境变量,打印环境变量内容,$PATH
bash执行命令的默认搜索路径.
查看所有环境变量:
env
配置
想要把自己写的程序按照指令执行,可以把程序拷贝到默认搜索路径文件夹里面,不要的时候删掉,但是一般不建议随便增加删除。
第二种方式增加搜索地址,当然,不小心误删了可以直接重新登录,因为是在内存中修改的,磁盘中的没变。
PATH=$PATH:yourpath
但是这是内存级别的,不能永久保存。
第三种方式在~/.bashrc中配置当前用户环境变量,在文件中写入下面语句:
export PATH=$PATH:yourpath
执行:
source .bashrc
重新登录即可看到配置好的
第四种方式在/etc/profile中配置全局环境变量,方法和第三中一样,只不过影响范围不同。
增加环境变量
export name=val
没有export叫本地变量,export和echo是内建命令,有些命令由bash执行,80%命令由bash创建子进程执行。
本地变量只在bash内部有效,无法被子进程继承,可以export name变成环境变量。
取消环境变量
unset name
通过代码查看环境变量
环境变量是可以被子进程拿到,我们的程序一般都是bash的子进程,环境变量是全局的,bash内部有一张env表,是一个指针数组(字符串数组),以NULL结尾。
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
extern char** environ;
for(int i=0;environ[i];i++)
{
printf("env[%d]->%s\n",i,environ[i]);
}
return 0;
}
或者
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main(int argc,char* argv[],char* env[])
{
for(int i=0;env[i];i++)
{
printf("env[%d]->%s\n",i,env[i]);
}
return 0;
}
当然也可以通过函数获得指定的环境变量:
#include <stdlib.h>
char *getenv(const char *name);
char *secure_getenv(const char *name);