本文主要是介绍【环境变量】命令行参数 | 概念 | 理解 | 命令行参数表 | bash进程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
四组概念
命令行参数概念&理解
查看命令函参数
命令行字符串&命令行参数表
bash进程
最近有点小忙,可能更新比较慢。
四组概念
- 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
- 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
- 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。
- 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
并发:在特点的时间范围内,一个CPU调度进程,多进程以上下文切换的方式保证进程同时得以推进。
用户层出现卡顿的情况❓
回答:在运行队列中排队的进程很多,CPU切换的负担过重,出现进程被再次调度的时间很长,或者长时间不被调度的情况,出现进程的卡顿,也就是用户层出现卡顿的情况。
并行:并行的同时存在并发。并发切换速度非常快,用户层感知不到的。并发的历史价值是指多个CPU能让多个进程同时运行,既便宜又能满足用户的需求。(软件技术带来的意义)
独立性(地址空间细讲):任务启动变成进程,多进程运行,进程和进程之间是不影响的。数据的独立(全局/局部,but全局变量可以被子进程看到,局部不可以)
竞争性:硬件资源优先(只有一套),进程是非常多的,进程通过访问硬件来达到自己的任务目的,进程在资源本质上天然就是具有竞争性的。
命令行参数概念&理解
main()函数可以接收参数,这些参数是什么❓表示的什么意义❓ 为什么存在❓
- main函数的参数可带参数,也可以不带参数(这里讨论带参的)
- int main ( int argc, char *argv[ ] )
- 参数 int argc, char *argv[ ]
- 参数就是命令行参数的形式参数;命令行中输入的是实际参数
- int argc 表示指针数组中元素的个数有多少(c count)
- char *argv 表示指针数组(数组中每个元素都是char *类型的元素)
- >>>>>>char *类型的指针
- 指向某个字符的地址
- 指向某个字符串的起始地址
- 在char *argv[ ]中char *类型的元素通常是指向字符串的起始地址的
- char *argv[ ]的最后一个指针必须指向NULL
- argc 是不包括NULL的个数的
- 命令行输入的参数会存在程序
查看命令函参数
编译运行我们发现
- argc中的元素就是命令行中输入的是参数,即命令行参数
- argc是根据命令行输入的参数变动的大小的
- argc 是不包括NULL的个数的
- char *argv[ ] 是变长数组
- 命令行输入的参数会存在程序(自己的程序a.out 或者 系统的指令程序)和程序匹配的选项
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{for(int i = 0;i < argc;i++){printf("argv[%d]->%s\n",i,argv[i]);}return 0;
}
命令行字符串&命令行参数表
- 整体:命令行字符串
- 局部:程序的路径&名称 + 和该进程匹配的选项(或者只有程序的路径&名称)
- 程序:分为用户自己写的程序&选项 和 系统的程序&选项
- 用户在命令行输入的参数整体是一个命令行字符串。
- 由OS中的进程/模块负责以空格为分割线分割成1个1个字符串(把字符串变成"\0")。
- OS中的进程/模块 把这些字符串的地址传给argv数组,形成命令行参数表,argv中的元素都指向这些字符串。
- 再以参数的形式传给子进程的main函数。
- 命令行参数表前面都是有效字符串的地址,最后必须以NULL收尾。
【自己程序&选项】
【系统程序&选项】
【验证argc以NULL收尾】
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{for(int i = 0;argv[i];i++){printf("argv[%d]->%s\n",i,argv[i]);}return 0;
}
【命令行参数表】
bash进程
有人问到底是谁这么干的❓为什么要这么干❓
回答:bash进程。
🙂感谢大家的阅读,若有错误和不足,欢迎指正。
这篇关于【环境变量】命令行参数 | 概念 | 理解 | 命令行参数表 | bash进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!