【Linux】:命令行参数

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux命令行参数的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

1. 命令行参数

1.1 命令行参数是什么 

1.2 实现命令行版的计算器 

1.3 自定义实现基本指令 


1. 命令行参数

从我们写代码到现在,我们说mian函数是程序的入口点,那么既然是函数,就要被调用!

  • 在Linux系统中,一个进程(包括mian函数)是通过父进程fork出子进程然后开始执行的;
  • 在C语言程序中,没有其他函数直接调用mian函数;main函数的执行代表了整个程序的开始,而程序的结束则是通过main函数的返回值来表示。

其实在我们Linux系统中,mian函数也是可以带参数的;

int main(int argc, char * argv[])

那么这两个参数是代表什么意思呢?可以先来看一段代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
    for(int i = 0; i < argc; i++)
    {
        printf("%d: %s\n", i, argv[i]);
    }
    return 0;
}

1.1 命令行参数是什么 

通过代码的实验可以看到:

argc就是我们在命令行输入的选项个数(以空格作为分隔符)

argv依次保存的是每一个通过空格分割的选项字串的起始地址,最后一个位置以NULL结尾

那么有没有可能argv[]里面没有任何数据呢?

肯定至少都有一个,因为启动程序的指令:./可执行程序 就已经是第一个参数了!

上述工作由shell或者OS自动帮我们完成!

1.2 实现命令行版的计算器 

可以通过命令行参数然后编写代码实现一个简易版的计算器:

通过启动可执行程序,然后在后面跟上运算法则,再带上两个数

./可执行程序 -add num1 num2 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


// ./可执行程序 -add num1 num2 
int main(int argc, char *argv[])
{
    // 判断输入是否合理
    if (argc != 4)
    {
        // 提示正确的使用
        printf("Use error, Usage: %s op[-add|sub|mul|div] num1 num2\n", argv[0]);
        return 1;
    }

    int x = atoi(argv[2]); // 转化为整数
    int y = atoi(argv[3]);
    int result = 0;

    if (strcmp(argv[1], "-add") == 0)
    {
        result = x + y;
        printf("%d + %d = %d\n", x, y, result);
    }
    else if (strcmp(argv[1], "-sub") == 0)
    {
        result = x - y;
        printf("%d - %d = %d\n", x, y, result);
    }
    else if (strcmp(argv[1], "-mul") == 0)
    {
        result = x * y;
        printf("%d * %d = %d\n", x, y, result);
    }
    else if (strcmp(argv[1], "-div") == 0)
    {
        if (0 == y)
            printf("%d/%d=error! div zero\n", x, y);
        else
            printf("%d/%d=%d\n", x, y, x / y);
    }
    else
    {
        printf("Use error, you should use right command line\nUsage: %s op[-add|sub|mul|div] d1 d2\n", argv[0]);
    }
    return 0;
}

通过使用命令行参数来使用这个计算器,然后再对比我们使用的指令,比如ls、ls -l、

ls -l -a、ls -l -a -n、touch file等等这些指令后面跟的选项就类似于现在实现的计算器,所以就可以得出我们使用指令的时候,第一个就是要运行的可执行程序,后面跟的选项就是一个个命令行参数,然后将这些命令行根据空格分割,传递给这个程序,然后就可以实现制定操作了!

1.3 自定义实现基本指令 

命令行参数可以支持各种指令级别的命令行选项的设置!

同样的我们也可以使用命令行参数来完成一些指令操作:通过使用C语言文件操作接口来实现touch命令

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    // ./mytouch 文件名
    // 判断是否合法
    if (argc != 2)
    {
        printf("touch: missing file operand\n");
        return 1;
    }

    FILE *fp = fopen(argv[1], "w");
    if (fp != NULL)
        fclose(fp);

    return 0;
}

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,欲知后事如何,请听下回分解~,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第59天:动态[1]

代码随想录算法训练营第59天&#xff1a;动态 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: …

JavaEE—什么是服务器?以及Tomcat安装到如何集成到IDEA中?

目录 ▐ 前言 ▐ JavaEE是指什么? ▐ 什么是服务器&#xff1f; ▐ Tomcat安装教程 * 修改服务端口号 ▐ 将Tomcat集成到IDEA中 ▐ 测试 ▐ 结语 ▐ 前言 至此&#xff0c;这半年来我已经完成了JavaSE&#xff0c;Mysql数据库&#xff0c;以及Web前端知识的学习了&am…

阅读这篇文章,彻底了解响应式网页设计

随着移动设备的普及&#xff0c;访问网站的方式发生了翻天覆地的变化。人们不再仅仅依靠桌面机来获取信息和享受在线服务。这给网页设计带来了巨大的挑战。如何构建一个能够在各种设备上流畅运行并提供一致用户体验的网站&#xff0c;已经成为每个网页设计师关心的问题。此时&a…

LLM大模型工程师面试经验宝典--基础版(2024.7月最新)

1.简单介绍一下大模型【LLMs】&#xff1f; 大模型&#xff1a;一般指1亿以上参数的模型&#xff0c;但是这个标准一直在升级&#xff0c;目前万亿参数以上的模型也有了。大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是针对语言的大模型。 2.目前主…

Docker期末复习

云计算服务类型有: IaaS 基础设施及服务 PaaS 平台及服务 SaaS 软件及服务 服务类型辨析示例: IaaS 服务提供的云服务器软件到操作系统,具体应用软件自己安装,如腾讯云上申请的云服务器等;SaaS提供的服务就是具体的软件,例如微软的Office套件等。 云计算部署模式有: 私有云…

网上下载的PDF文件为何不能复制文字?该怎么办呢?

不知道大家有没有到过这种情况&#xff1f;在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 首先&#xff0c;有可能PDF文件是扫描文件&#xff0c;是扫描文件的话&…

一文get懂kwai短视频助力巴西博弈slots游戏广告优势

一文get懂kwai短视频助力巴西博弈slots游戏广告优势 在数字化时代&#xff0c;短视频广告凭借其独特的魅力和高效的传播方式&#xff0c;成为了各大品牌进行营销推广的重要手段。特别是在巴西这个充满活力的国家&#xff0c;kwai短视频广告以其独特的方式&#xff0c;为博弈游…

windows下修改Jar包内容的两种方式

windows下修改Jar包内容的两种方式 背景第一种&#xff1a;解压工具第二种&#xff1a;Jar命令附Jar命令用法基本用法常见选项示例1&#xff1a;创建一个简单的 JAR 文件示例2&#xff1a;创建包含清单文件的 JAR 文件示例3&#xff1a;列出 JAR 文件的内容示例4&#xff1a;提…

面经-计算机基础

1.计算机⽹络 1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议? 计算机网络体系结构 应⽤层 应⽤层 (application-layer &#xff09;的任务是通过应⽤进程间的交互来完成特定⽹络应⽤。 应⽤层协议定 义的是应⽤进程&#xff08;进程&#xff1a;主机中正在运⾏的程序&…

SpringBoot:SpringBoot中调用失败如何重试

一、引言 在实际的应用中&#xff0c;我们经常需要调用第三方API来获取数据或执行某些操作。然而&#xff0c;由于网络不稳定、第三方服务异常等原因&#xff0c;API调用可能会失败。为了提高系统的稳定性和可靠性&#xff0c;我们通常会考虑实现重试机制。 Spring Retry为Spri…

HarmonyOS Next开发学习手册——视频播放 (Video)

Video组件用于播放视频文件并控制其播放状态&#xff0c;常用于为短视频和应用内部视频的列表页面。当视频完整出现时会自动播放&#xff0c;用户点击视频区域则会暂停播放&#xff0c;同时显示播放进度条&#xff0c;通过拖动播放进度条指定视频播放到具体位置。具体用法请参考…

MATLAB|更改绘图窗口的大小和位置

MATLAB绘图 plot、plot3、cdfplot都适用 效果 如下图&#xff0c;运行程序后可以直接得到这两个绘图窗口。 右上角的Figure1是原始图片&#xff0c;右下角的Figure2是调整了位置和大小后的绘图窗口。 完整源代码 % 绘图大小和位置调整 % Evand©2024 % 2024-7-1/Ver1…

信息系统的安全模型

1. 信息系统的安全目标 信息系统的安全目标是控制和管理主体&#xff08;含用户和进程&#xff09;对客体&#xff08;含数据和程序&#xff09;的访问。作为信息系统安全目标&#xff0c;就是要实现&#xff1a; 保护信息系统的可用性&#xff1b; 保护网络系统服务的…

【Linux】:环境变量

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux环境变量的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门…

芒果YOLOv10改进122:注意力机制系列:最新结合即插即用CA(Coordinate attention) 注意力机制,CVPR 顶会助力分类检测涨点!

论文所提的Coordinate注意力很简单,可以灵活地插入到经典的移动网络中,而且几乎没有计算开销。大量实验表明,Coordinate注意力不仅有益于ImageNet分类,而且更有趣的是,它在下游任务(如目标检测和语义分割)中表现也很好。本文结合目标检测任务应用 应专栏读者的要求,写一…

深入学习 Kafka(2)- Partition 和 Topic

1. Partition的作用 Topic是逻辑的概念&#xff0c;Partition是物理的概念&#xff1a; Partition 对一个 Topic 的消息进行物理上的分离&#xff0c;让消息可以分布在不同的实体机器上&#xff0c;可以提升系统吞吐量和并行处理能力。每个Partition可以有多个副本&#xff08…

LinkedHashMap、TreeMap

LinkedHashMap&#xff1a; 有序、不重复、无索引&#xff0c;底层是双链表 TreeMap&#xff1a;底层基于红黑树&#xff0c;可以对键进行排序 默认排序&#xff1a;integer和string都是从小到大排序 例题&#xff1a;

农村程序员陈随易2024年中总结

今天是 2024年7月1日&#xff0c;时间如白驹过隙&#xff0c;今年已去其一半。 总结一下今年上半年的情况&#xff0c;给大家提供一些参考和建议。 希望大家关注一下公众号 陈随易&#xff0c;有些内容只在公众号发表。 先看看我的年初计划&#xff0c;这个在今年年初的时候&…

泛微E9开发 限制明细表列的值重复

限制明细表列的值重复 1、需求说明2、实现方法3、扩展知识点3.1 修改单个字段值&#xff08;不支持附件类型&#xff09;3.1.1 格式3.1.2 参数3.1.3 案例 3.2 获取明细行所有行标示3.2.1 格式3.2.2 参数说明 1、需求说明 限制明细表的“类型”字段&#xff0c;在同一个流程表单…