波莱网站开发,网业设计,网站SEO建设摘要,个人网页细规划教案
#x1f525;个人主页#xff1a;guoguoqiang. #x1f525;专栏#xff1a;Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…
个人主页guoguoqiang. 专栏Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一.命令行参数
【示例1】main函数也是函数main函数可以带参吗
没错main函数有三种形式其中最完整的形式是
int main(int argc, char* argv[], char* env[])
{}int main(int argc, char* argc[]){}main函数正常不带参数这些参数是什么呢这些参数是命令行参数。 ·argcargument count是一个整数表示传递给程序的命令行参数的数量。 ·argvargument vector是一个字符指针数组其中每个指针指向一个参数字符串。 我们看一下这个argv里面有什么
int main(int argc, char* argv[]){for(int i 0; i argc; i){printf(argv[%d]-%s\n,i,argv[i]);}return 0;
}用来查看argv里面有什么。 为什么要有命令行参数 本质命令行参数本质是交给我们程序的不同的选型用来定制不同的程序功能。命令中会携带很多的选项 我们可以用来自定义命令
#include stdio.h
#include string.hint main(int argc,char* argv[],char* env[]){if(argc 2 strcmp(-a,argv[1]) 0){printf(Hello, I am sul\n);}else if(argc 2 strcmp(-b,argv[1]) 0){printf(sul is cool!\n);}else{printf(\r\tYou are supposed to use -a or -b\n);}return 0;
}结论1父进程的数据能被子进程看到并且访问
结论2命令行中启动的程序都会变成进程其实都是bash的子进程
所以也就是父进程bash干的。bash是一个命令行解释器我们输入的./sul -b默认是输入给父进程bash/shell的
1.程序启动时当您在命令行中输入程序名称并按回车时命令行解释器如 shell会启动程序并将命令行参数传递给程序。
2.操作系统操作系统负责创建进程并将命令行参数准备好。当程序开始执行时操作系统将参数传递给程序的 main 函数
二.环境变量
1.环境变量的基本概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 环境变量通常具有某些特殊用途在系统当中通常具有全局特性。
我们在系统中执行ls命令时不需要./ls而我们执行自己编写的C语言程序并编译为可执行程序时确需要使用./才能运行这是为什么呢 使用which命令可以查看该指令的存储位置比如 which ls会发现ls存储在/usr/bin/目录中
系统中维护了一个PATH环境变量系统可以帮助我们在PATH环境变量保存的各个路径中查找命令。echo $PATH 命令的作用是输出当前用户的PATH环境变量值。这个值通常包含多个目录用冒号:分隔。例如 也就是说只要我们执行的某个命令在PATH环境变量下就可以直接使用我们的程序。就不用使用./就可以执行程序了。 我们可以通过将可执行文件保存到PATH指定目录这样就可以不带./运行了。但是这种方式会污染系统的命令所以我们不建议使用这种方式。 我们在编写C/C代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪里但是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找
2.查看环境变量的方法
echo $[环境变量名] 常见的环境变量 PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash。 SHELL环境变量定义了当前用户的默认shell类型。这个变量告诉系统在用户登录时应该启动哪个shell。shell是用户与操作系统交互的界面它负责解释用户输入的命令并执行它们。
默认情况下当用户登录时系统会启动用户配置的默认shell。这个shell可以是各种类型的shell如Bash、Zsh、Fish等。不同的shell有不同的命令语法和特性因此用户可以根据个人喜好或工作需要选择不同的shell。
SHELL变量的值通常是shell的路径例如
/bin/bashBashBourne-Again SHell是大多数Unix-like系统中默认的shell。
/bin/zshZshZ shell是一个强大的shell提供了许多扩展和增强功能。
/bin/fishFish是一个现代化的shell以其简洁的语法和强大的自动完成功能而受到欢迎。 3.环境变量相关命令
1.echo: 显示某个环境变量值 2.export设置一个新的环境变量 注意export设置的环境变量仅在当前会话有效当我们将整个会话关闭重新打开Linux命令行时这个环境变量就会消失。 3.env显示所有环境变量 4.unset清除环境变量 5.set显示本地定义的shell变量和环境变量
显示本地定义变量的前20行 我们可以直接在bash命令行直接定义变量不再使用export。set除了显示环境变量外还显示了本地自定义的shell变量例如 本地变量与bash环境变量的区别本地定义的变量是局部变量只在当前shell中有效而环境变量是全局变量在整个系统中都是可见的。环境变量通常用于设置系统级别的配置而本地定义的变量用于存储脚本或命令行中的临时数据。
4.环境变量的组织方式以及获取环境变量的三种方法
每个进程都有一张环境表环境表是一个字符串指针数组每个指针指向一个以“\0”结尾的环境字符串 有三种从环境表获取环境变量的方法 1.getenv 使用getenv实现pwd命令 2.通过第三方变量environ获取 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。 即extern char** environ,使用代码打印环境变量的所有内容。
#includestdio.h
#includestdlib.h int main()
{extern char **environ;for(int i 0; environ[i]; i){printf([%d]-%s\n, i, environ[i]);}return 0;
}3.main函数env参数第三个参数 我们在使用命令执行某些可执行程序时bash会帮助给程序传入三个参数 以ls命令为例ls -a -l 他的命令行参数有三个 分别是ls -a -l argv中保存的应该是{“ls”,“-a”,“-l”,“NULL”},第三个参数就是bash传递给它的子进程的环境变量。
环境变量具有全局属性
环境变量具有全局属性可以被子进程继承下去。子进程的环境变量是从父进程继承来的默认所有的环境变量都会被子进程继承。