【Linux】进程(5):命令行参数

news2024/11/17 10:34:46

大家好,我是苏貝,本篇博客带大家了解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传递命令行参数

又父进程的数据,默认能被子进程看到并访问,所以子进程能看到这张表

在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一个远程数据库 Supabase

地址:Supabase | The Open Source Firebase Alternative 使用文档: Supabase Docs

数据库 | 模式分解

1. 无损连接保持依赖 要有一个关系有两个依赖码

linux系统——计算机网络协议,ifconfig命令

在linux系统中,可以在指定文件查看网卡名,进而使用ifconfig网卡名查询相应网络信息

RH850F1KM——ADC模块

文章目录 前言一、Conversion time:转换时间二、参考电压三、分辨率scan group四、虚拟通道模数转换器-ADC基础 Autosar MCAL配置——ADC 前言 在RH850F1KM系列MCU中,ADCA模块即为ADC模块,如下是各个型号所具有的ADC物理单元。 时钟的频率决定ADC的触发频率,转换时间和采样…

uniApp子组件监听数据的变化的方法之一

props:{//用来接收外界传递过来的数据swiperList:{type:Array,default:[]}}, swiperList:是父组件传递过来的值 通过 watch 监听(在父组件中也同样可以使用,跟VUE的监听数据变化同理) watch:{//监听组件中的数据变化swiperList(ol…

[数据集][图像分类]轮胎纹理识别裂纹和正常轮胎分类数据集1028张2类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1028 分类类别数:2 类别名称:["cracked","norma…

低代码开发系统是什么?它有那些部分组成?

低代码开发系统是什么?它有那些部分组成? 一、引言 在当今快速变化的商业环境中,企业对于快速响应市场需求、降低开发成本和提高开发效率的需求日益增强。低代码开发系统(Low-Code Development Platform)应运而生&am…

C#WPF数字大屏项目实战02--主窗体布局

1、主窗体起始属性 设置有关属性如下: WindowStyle"None"-》无边框 AllowsTransparency"True" -》允许透明 WindowStartupLocation"CenterScreen"-》启动时位于屏幕中间 FontFamily"Microsoft YaHei"-》字体微软雅黑 …

关于FPGA 使用SPI FLASH固化时如何配置固化参数

关于FPGA 使用SPI FLASH固化时如何配置固化参数 EDA工具:Vivado 关于FPGA 使用SPI FLASH固化时如何配置固化参数一、引言二、如何设置固化参数:使用50M的速度 ,SPI为X4 ,以及bit压缩第一:点open implenment design第二…

每日刷题——杭电2156.分数矩阵和杭电2024.C语言合法标识符

杭电2156.分数矩阵 原题链接:Problem - 2156 题目描述 Problem Description:我们定义如下矩阵: 1/1 1/2 1/3 1/2 1/1 1/2 1/3 1/2 1/1 矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。请求出这个矩阵的总和。 Input&#xf…

mimkatz获取windows10明文密码

目录 mimkatz获取windows10明文密码原理 lsass.exe进程的作用 mimikatz的工作机制 Windows 10的特殊情况 实验 实验环境 实验工具 实验步骤 首先根据版本选择相应的mimikatz 使用管理员身份运行cmd 修改注册表 ​编辑 重启 重启电脑后打开mimikatz 在cmd切换到mi…

Python考试复习--day8

1.查询省会 capitals {湖南:长沙,湖北:武汉,广东:广州,广西:南宁,河北:石家庄,河南:郑州,山东:济南,山西:太原,江苏:南京,浙江:杭州,江西:南昌,黑龙江:哈尔滨,新疆:乌鲁木齐,云南:昆明,贵州:贵阳,福建:福州,吉林:长春,安徽:合肥,四川:成都,西藏:拉萨,宁夏:银川,辽宁:沈阳,青海…

打造你的专属Vue组件:超实用“手机号、邮箱、身份证号加密显示组件“实战

随着Web应用程序的发展,我们经常需要处理用户敏感信息,如手机号码和身份证号码。为了保护用户隐私,我们需要在前端对这些信息进行加密处理,以避免直接暴露在页面上。在这篇博客中,我们将介绍如何使用Vue 3.0单文件组件…

你喜欢什么样的狗?喜欢内狗还是外狗?论看门狗的重要性:极低功耗微处理器复位电路CN803/CN809/CN810

看门狗:缩写WTD,英文WATCH DOG. 你的程序会死机吗? 陷入死循环或程序指针不知跑哪里去了,看门狗的作用是把程序拉回来,重新开始跑。 有了看门狗,程序就不会死机,所以很重要。 比如一个温度控制器&#xf…

【机器学习】集成语音与大型语音模型等安全边界探索

探索集成语音与大型语言模型(SLMs)的安全边界 一、引言二、SLMs的潜在安全风险三、对抗性攻击与越狱实验四、提高SLMs安全性的对策五、总结与展望 一、引言 近年来,随着人工智能技术的飞速发展,集成语音与大型语言模型&#xff08…

什么是做到?在做到平台怎么赚钱?

外语比较好的人,也可以在网上接单赚钱,下面就给大家分享一个翻译赚钱的靠谱平台——做到!: 做到! 简介 做到! 网于2011年6月份上线,是阿里巴巴旗下阿里翻译团队打造的语言众包平台,汇聚众多语言爱好者,提…

java属性重写

介绍 关于,属性没有重写只能是编译类型的 代码 package b;public class main_ {public static void main(String[] args) {//向上转型,父类的引用转向了子类的fathetr fatnew son();System.out.println("编译类型是father时的sum属性是"fat.…

单片机按键处理模块

一 介绍 1.key_board用于单片机中的小巧多功能按键支持,软件采用了分层的思想,并且做到了与平台无关,用户只需要提供按键的基本信息和读写io电平的函数即可,非常方便移植,同时支持多个矩阵键盘及多个单io控制键盘。 …

LeetCode374猜数字大小

题目描述 我们正在玩猜数字游戏。猜数字游戏的规则如下:我会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,我选出的数字比你猜测的数字大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int n…

从零开始,如何在3个月内吸引3500+用户:我的私域运营秘诀

大家好,我是墨云,一位看起来不像搞技术的IT男。 从去年4月份开始研究AI,去年整整一年都在不停地摸索、怀疑和自我迭代。今年3月份,我决定主攻微信私域,创建了AI觉醒派社群矩阵。3个月内,我成功吸引了3500用…