【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传递命令行参数

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

在这里插入图片描述


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

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

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

相关文章

iOS中的@objc和@objcMembers实现Swift和OC的交互

目录 ​​​​​​​前言 一、使用OC和Swift混编的场景 二、objcMembers 1.objcMembers 的用法和示例 1.基本用法 2.与objc 的区别 3.使用场景 1. 与Objective-C代码互操作 2.需要使用Objective-C运行时特性 3.避免重复的objc修饰符 4.注意事项 前言 这篇博客主要讨…

Paraformer解读(1)基于self-attention和dfsmn的encoder

DFSMN SAN-M python实现 import torch import torch.nn as nn import torch.nn.functional as Fclass PositionalEncoding(nn.Module):def __init__(self, d_model, dropout0.1, max_len5000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(pdropout)p…

C语言中整形提升举例说明

一. 简介 前面一篇文章简单学习了 C语言中的整形提升。文章如下: C语言中的整型提升-CSDN博客 本文再举例说明 C语言随处可见的整型提升的代码示例。 二. C语言中整形提升举例说明 1. 什么是整形提升? C语言的表达式中的 字符型(即 c…

sklearn.pipeline的用法介绍

sklearn.pipeline可以将多个数据预处理步骤和机器学习模型组合,成一个整体,从而简化了机器学习的流程。 sklearn.pipeline类可以将多个算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流,主要带来两点好处: 1.…

你管这破玩意儿叫负载均衡?

你管这破玩意儿叫负载均衡? 那么四层负载均衡器是如何工作的呢总结 相信大家都听过这样的一道经典面试题:「请说出在淘宝网输入一个关键词到最终展示网页的整个流程,越详细越好」 这个问题很难,涉及到 HTTP,TCP,网关…

MATLAB基础应用精讲-【数模应用】SPSSPRO数据处理

目录 SPSS SPSSRO 数据标签 1、作用 2、输入输出描述 3、案例示例 4、案例数据

Ubuntu 中 Pycharm 的一个奇怪bug:命令行换行处会丢失字符

如果命令行一行显示不完原本连续的一行,那么在末尾处的若干个字符可能会丢失。 可能的解决方案: 1. 检查 PyCharm 终端设置 PyCharm 的终端可能需要配置,以确保换行时不会丢失字符。 打开 PyCharm。进入 File > Settings(W…

Python第二语言(二、Python语言基础)

目录 1. python中常用的6中数据类型 2. Print语句(输出程序) 3. 字面量 4. 注释 5. 变量 6. 数据类型 7. type()语句:查询数据类型 8. 数据类型转换语句 9. 标识符 10. 算术运算符 11. 赋值运算符 && 复合赋值运算符 12. …

3. redis常见部署架构

redis常见部署架构 一、redis常见部署架构1、常见部署架构2、多实例部署2.1 规划安装目录、配置文件2.2.2 编辑实例配置文件2.2.3 启动实例2.2.4 测试数据读写 3、redis主从复制3.1 规划3.2 从服务器配置3.3 验证主从状态3.4 主从角色切换 4、分片集群4.1 原理4.2 分片集群的部…

如何反编译jar并修改后还原为jar

如何反编译jar并修改后还原为jar 目标:修改jar包中某个类的某个方法后还原为新的jar 1.新建android工程,把旧的jar添加为lib 2.用jadx-gui打开旧的jar并保存所有资源 3.找到保存的资源中想修改的.java类 4.复制类中的内容, 在android工程中新建一个同样路径的包,并在包下创建…

CSAPP Lab02——Bomb Lab完成思路详解

看见的看不见的 瞬间的永恒的 青草长啊大雪飘扬 ——月亮之上 完整代码见:CSAPP/bomb at main SnowLegend-star/CSAPP (github.com) 01 字符串比较 简单的把输入的字符串和地址“0x402400”内早已存储的字符串相比较。如果两个字符串相等则函数返回,否…

【Git】如何不管本地文件,强制git pull

要在 Git 中强制执行 git pull 操作,忽略本地文件的更改,可以按照以下步骤操作: 保存当前工作状态:如果你有未提交的更改,可以使用 git stash 将这些更改存储起来。 git stash强制拉取最新代码:使用 git re…

力扣2156.查找给定哈希值的子串

力扣2156.查找给定哈希值的子串 rolling hash:求带权的值 左边是高位 右边是低位 本题要求左边低位 只要反向求即可 class Solution {public:string subStrHash(string s, int power, int modulo, int k, int hashValue) {int n s.size();long long M modulo,p…

ffmpeg视频编码原理和实战-(2)视频帧的创建和编码packet压缩

源文件&#xff1a; #include <iostream> using namespace std; extern "C" { //指定函数是c语言函数&#xff0c;函数名不包含重载标注 //引用ffmpeg头文件 #include <libavcodec/avcodec.h> } //预处理指令导入库 #pragma comment(lib,"avcodec.…

9.抽象类和接口

抽象类 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类 比如&#xff1a; 我…

微信小程序动画和Canvas笔记

微信小程序动画和Canvas 动画 使用wx.createAnimation创建动画对象 // 创建动画对象 const animation wx.createAnimation({duration: 1000, // 动画持续时间timingFunction: ease, // 动画速度曲线delay: 0, // 动画延迟时间transformOrigin: 50% 50% 0, // 动画的中心点 …

error /var/lib/jenkins/workspace/*/node_modules/node-sass: Command failed.

原因&#xff1a;node-sass版本不一致 版本图&#xff1a; 解决方案&#xff1a; 进入到jenkins项目目录下&#xff0c;修改package.json文件 将7.0.1改成6.0.1版本

【python深度学习】——pytorch中tensor的view、resize(resize_)与reshape

TOC 1. view() view()方法具有以下特性&#xff1a; 它只能在tensor是连续的时候使用&#xff08;可以调用is_contiguous()方法查看tensor是否连续&#xff09;, 如果要对不连续的张量使用&#xff0c; 需要先使用.contiguous()使其在内存上连续。view()方法不改变tensor的s…

Python自建chatgpt服务器:使用Flask实现类似Chat服务器流式API接口

引言 使用Flask框架可以轻松实现一个类似chatgpt流式响应的接口&#xff0c;该接口通过POST请求接收prompt和history参数&#xff0c;分别对应为聊天系统的提示词和对话历史&#xff0c;server则给予server-sent event (SSE)返回聊天系统的响应。 服务端 开发前的思考 我们…

【LeetCode每日一题】3067. 在带权树网络中统计可连接服务器对数目-DFS和图

Hey我的编程小伙伴们&#x1f44b;&#xff0c;今天我要和大家分享一道我在LeetCode上遇到的超有趣的题目——编号3067的“在带权树网络中统计可连接服务器对数目”。这是一道非常适合练习DFS和图的题目哦&#xff01;&#x1f913;&#x1f4bb; 邻接图是什么&#xff1f; 在…