个人主页:点我进入主页
专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶 算法
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
一.命令行参数
1.1main函数参数
在我们学习c语言时我们的main函数的参数是什么样子的?是空吗?事实上不是,main函数有一些参数,这次我们在这里我们先说两个argc和argv,这两个参数有神魔用呢?我们看代码:
#include<stdio.h>
int main(int argc,char*argv[])
{
for(int i=0;i<argc;i++)
{
printf("argv[%d]->%s\n",i,argv[i]);
}
return 0;
}
我们编译运行代码,输入指令
./myprocess.exe
可以看到
我们输入
./myprocess.exe -a -b -c
可以看到
1.2为什么这么干
我们回想一下我们在Linux的指令不正是和这个一样吗?例如我们的指令
ls -l -a
其中ls对应./myprocess.exe ,-l -a对应-a -b -c等。
有这样的参数我们就可以实现下面的功能:
#include<stdio.h>
#include<string.h>
int main(int argc,char*argv[])
{
if(argc!=2)
{
printf("没有选项\n");
return 1;
}
if(strcmp(argv[1],"-a")==0)
{
printf("this is function 1\n");
}
else if(strcmp(argv[1],"-b")==0)
{
printf("this is function 2\n");
}
else if(strcmp(argv[1],"-c")==0)
{
printf("this is function 3\n");
}
else
{
printf("no this function \n");
}
return 0;
}
其中-a是功能1,-b是功能2....
二.环境变量
2.1环境变量的引入
我们是否有这样一个疑问?我们知道Linux中一切皆文件,我们的ls指令相当于一个可执行文件,它在任意的地方就可以提使用,我们编写程序生成的可执行程序却需要指定路径然后执行,这就是是否在环境变量中的区别,在Linux中每一次开机都会将环境变量加载到内存中我们可以输入echo &PATH来看当前的环境变量
echo $PATH
2.2.1环境变量的增添(内存级别)
如果我们想要添加环境变量需要输入指令例如我们想要将/home/yang/Code中的myprocess.exe增加到环境变量中我们输入指令
PATH=/home/yang/Code
当我再次打印环境变量就可以看到
由于此时的环境变量是内存级的所以我们重新打开我们的xshell就可以恢复以前的及环境变量,我们想要将myprocess.exe加入到环境变量中且不覆盖原来的可以输入指令
sudo cp myprocess.exe /usr/bin
这样我们就可以在任意路径下进行使用这个可执行程序
2.2.2环境变量的删除(内存级别)
我们输入指令
sudo rm -rf /usr/bin/myprocess.exe
我们想要使用myprocess.exe就不可以了。
2.2.3指令增加和删除环境变量(export和unset)
我们可以使用
export hello=111
来增添环境变量 ,这个环境变量是我们自己创建的,我们可以通过指令
env | grep hello
来查看环境变量
我们想要删除需要输入指令
unset hello
2.2.4创建本地变量
我们输入指令
mmm=1
此时mmm就是我们的本地变量,我们想要吧它加入到环境变量中可以输入指令
export mmm
2.2 环境变量的修改(可永久保存)
我们先进入家目录,可以输入指令
cd ~
用vim打开./profile文件,在最后一行加上
export PATH=$PATH:/home/yang/Code
退出保存,然后重新打开我们的xshell,输入指令
echo $PATH
我们可以看到有我们的环境变量,此时就可以长久保存,想要恢复删除即可。
2.3环境变量的代码获取
2.3.1extern获取环境变量
#include<stdio.h>
#include<unistd.h>
int main()
{
extern char**environ;
for(int i=0;environ[i];i++)
{
printf("environ[i]->%s\n",environ[i]);
}
}
我们运行代码可以看到
这个不正是我们使用env所产生的环境变量吗?
所以环境变量也可以利用代码来获取。
2.3.2main函数获取环境变量
环境变量可以被子进程获取,和我们上面的命令行参数一样,都可以通过父进程给到子进程,main函数的父进程是bash,我们看下面代码
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[],char *env[])
{
for(int i=0;env[i];i++)
{
printf("env[i]->%s\n",env[i]);
}
}
bash运行时会自动生成两张表 一张是命令行参数表,一张是环境变量表
这两张表会通过各种方式给子进程(这里指main函数)
2.3.3getevn获取环境变量
我们还可以通过函数getenv来获取单个环境变量,getenv头文件时stdlib.h,当没有找到是返回空,我们看代码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
char *path=getenv("HOME");
if(path==NULL) return 1;
printf("%s\n",path);
}
运行结果为:
我们可以看到在环境变量中HOME对应的就是/home/yang