【Linux】进程(5):命令行参数
大家好,我是苏貝,本篇博客带大家了解Linux进程(5):命令行参数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- (A)为什么要有命令行参数
- (B)谁将命令行参数传递
在我们学习C语言的时候,我们的main函数都是不带参数的,其实main函数也可以带参数
这两个参数的意义是什么?
argc是int类型的,它表示的是命令行参数的个数(不需要用户传递,它会根据用户从命令行输入的参数个数自动确定)
第二个参数明显是指针数组,每个元素的类型是char*,这说明每个元素指向的要不是字符,要不是一个字符串,它的作用是存储用户从命令行输入进来的参数。
让我们通过代码来详细了解一下
先写.c文件
执行下面的程序
第一个只输入./myprocess,所以argc为1
第二个输入./myprocess和-a,它们以空格分隔,所以argc为2
第三个的grgc为3……
根据上面的代码,我们能够感觉到,数组argv是个变长数组,最后一个元素指向NULL,argc是数组的非NULL元素个数,我们以./myprocess -a -b -c为例
我们上面说过,./myprocess -a -b -c是命令行字符串,也是命令行参数。在我们命令行输入的时候,Linux中会有一些内部的功能将输入的整体的字符串打散成4个字符串:./myprocess ,-a,-b和-c(它们之间以空格作为分隔符)。然后让数组argv的元素分别指向它们,最后以参数的形式传递给main函数
Linux是如何实现将一整个字符串打散成多个字符串的呢?其实就只需要将分隔符(空格)全部设置为‘\0’即可
现在来证明一下数组argv最后一个元素是NULL
修改.c文件,如果argv最后一个元素是NULL,也就是0,那么循环会停下来。
进程不会死循环,所以argv最后一个元素是NULL
(A)为什么要有命令行参数
了解了命令行参数后,我们来思考一个问题:为什么要有命令行参数?
命令行参数的本质:交给程序不同的选项,用来制定不同的程序功能。比如:ls -a和ls -l中因为选项不同,功能就不同。我们再自己写一个有不同选项的程序
修改.c文件
上面代码的意思:当命令行参数不等于2时,会提醒输入./myprocess和-[a,b,c,d]中任意一个选项。当等于2时,对每一个选项都会打印出不同的语句
(B)谁将命令行参数传递
修改.c文件,其中,g_val是全局变量
根据结果,我们知道,父进程的数据g_val,默认能被子进程看到并访问
通过前面的学习,我们知道,命令行中启动的程序,都会变成进程,且都是bash的子进程
命令行参数默认是输入给父进程bash的,bash再命令行解释,将命令行参数变成main函数的2个参数。所以,是bash传递命令行参数
又父进程的数据,默认能被子进程看到并访问,所以子进程能看到这张表
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️
相关文章:

【Linux】进程(5):命令行参数
大家好,我是苏貝,本篇博客带大家了解Linux进程(5):命令行参数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 (A)为什么要有命令…...

vue2+antv/x6实现er图
效果图 安装依赖 npm install antv/x6 --save 我目前的项目安装的版本是antv/x6 2.18.1 人狠话不多,直接上代码 <template><div class"er-graph-container"><!-- 画布容器 --><div ref"graphContainerRef" id"gr…...
如何在XDMA中查看LTSSM状态机
简介 经常会遇到PCIe不能识别的问题,到底怎么去定位。本文以XDMA 为例,一方面复习下LTSSM状态机,一方面描述下如何通过FPGA的XDMA查看这个状态机 技术名词 LTSSM是一种常用于PCI Express(PCIe)接口的状态机…...

编译和运行qemu-uboot-arm64单板的Armbian系统
这篇文章ARM虚拟机安装OMV-CSDN博客遗留一个启动qemu-uboot-arm64单板Armbian镜像的问题,使用官方下载的镜像,会报错: fatal: no kernel available .... Failed to load /vmlinuz ...... qemu-system-aarch64 -smp 8 -m 8G -machine virt …...

Python版《消消乐》,附源码
曾经风靡一时的消消乐,至今坐在地铁上都可以看到很多人依然在玩,想当年我也是大军中的一员,那家伙,吃饭都在玩,进入到高级的那种胜利感还是很爽的,连续消,无限消,哈哈,现…...

Kubernetes ingress
目录 一.ingress 1.ingress简介 2.实现外部应用能访问内部集群服务的方法 (1)NodePort: (2)LoadBalancer: (3)externalIPs: (4)ingress&am…...

【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
🔥 个人主页:空白诗 🔥 热门专栏:【JavaScript】 文章目录 🌿 引言五、 Destructuring Assignment - 解构赋值,数据提取的艺术 🎨📌 数组解构📌 对象解构&...
Linux入门学习指南
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

纯血鸿蒙实战开发—如何添加顶部tab页面
1.Tabs组件 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabBar是导航页签栏. 根据不同的导航类型,布局会有区别,可以分为底部导航、顶部导航、侧边导航,其导航栏分别位于底部、顶…...

数仓建模—指标拆解和选取
数仓建模—指标拆解和选取 第一节指标体系初识介绍了什么是指标体系 第二节指标体系分类分级和评价管理介绍了指标体系管理相关的,也就是指标体系的分级分类 这一节我们看一下指标体系的拆解和指标选取,这里我们先说指标选取,其实在整个企业的数字化建设过程中我们其实最…...

HTML静态网页成品作业(HTML+CSS)——VIVO介绍网页(1个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...

MySQL(四) - SQL优化
一、SQL执行流程 MySQL是客户端-服务器的模式。一条SQL的执行流程如下: 在执行过程中,主要有三类角色:客户端、服务器、存储引擎。 大致可以分为三层: 第一层:客户端连接到服务器,构造SQL并发送给服务器…...

用 DataGridView 控件显示数据
使用DataGridView,可以很方便显示数据。 1.为解决方案添加数据集XSD,用作为项目数据源。 2.拖DataGridView控件到WinForms上。 3.在DataGridView控件的任务处,选择数据源。 4.选好数据源后,VS自动添加DataSet、BindingSourse和T…...

VisualSVN Server/TortoiseSVN更改端口号
文章目录 概述VisualSVN Server端更改端口号TortoiseSVN客户端更改远程仓库地址 概述 Subversion(SVN)是常用的版本管理系统之一。部署在服务器上的SVN Server端通常会在端口号80,或者端口号443上提供服务。其中80是HTTP访问方式的默认端口。…...

如何解决研发数据传输层面安全可控、可追溯的共性需求?
研发数据在企业内部跨网文件交换,是相对较为普遍而频繁的文件流转需求,基于国家法律法规要求及自身安全管理需要,许多企业进行内部网络隔离。不同企业隔离方案各不相同,比如银行内部将网络隔离为生产网、办公网、DMZ区,…...
表 ,索引的 degree 检查, trim(degree) default INSTANCES
检查degree >1 的 select substr(owner,1,15) Owner , ltrim(degree) Degree, ltrim(instances) Instances, count(*) "Num Tables" , Parallel from dba_tables where ( trim(degree) > 1 ) and table_name not like ET$% group by owner, degree , ins…...
Git - Rebase命令介绍
Git rebase 是版本控制系统 Git 中一个功能强大、使用广泛的命令。它用于将一个分支中的改动整合到另一个分支中。rebase与merge不同, merge会创建一个新的提交,而rebase则是将一系列提交移动或合并到一个新的基础提交中。下面是详细解释: G…...

JavaScript 从入门到精通Object(对象)
文章目录 对象文本和属性方括号计算属性 属性值简写属性名称限制属性存在性测试,“in” 操作符“for…in” 循环像对象一样排序 总结✅任务你好,对象检查空对象对象属性求和将数值属性值都乘以 2 对象引用和复制通过引用来比较克隆与合并,Obj…...

Postgresql中json和jsonb类型区别
在我们的业务开发中,可能会因为特殊【历史,偷懒,防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中,这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象。所以我们也可能会经常用到这类格式数据&am…...

太强了,使用 C# 开发的开源内网穿透工具
🏆作者:科技、互联网行业优质创作者 🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 🏆欢迎关注我(Net数字智慧化基地),里面…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...