Linux------命令行参数

目录

前言

一、main函数的参数

二、命令行控制实现计算器

三、实现touch指令


前言

当我们在命令行输入 ls -al ,可以查看当前文件夹下所有文件的信息,还有其他的如rm,touch等指令,都可以帮我们完成相应的操作。

其实运行这些指令的本质就是进程,当我们输入相关指令的时候,系统会判断该指令是否能被找到,如果能找到,就会执行相应的程序(形成进程), 让这个进程来帮我们完成相关操作。具体是如何处理的呢?今天我们就来学习一下命令行参数。

一、main函数的参数

在我们之前学习c/c++时,main函数都没有带参数,其实main函数是可以带参数的,只是当时我们没有用到很复杂的场景。

main函数完整的有三个参数,第一个参数 int argc 代表参数的个数,第二个参数char* argc[]是字符指针数组,代表参数的内容,第三个参数char* envp[]为环境变量,我们暂时不做了解(后续学环境变量会再来看)

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

我们用下面这段代码将argv打印出来看一下 

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

 我们运行可执行程序发现argv第一个参数是运行可执行程序的指令,后面没有更多了。

如果我们输入 ls -al 这种类似代码,我们可以看到命令行中的一个大的字符串,以空格作为分隔符,被分割成了几子串,argv里存放的就是一个这些小子串。如下,输出了4点

这样一来,我们就可以通过设置输出的个数和内容,来让同一份代码实现不同的功能。

二、命令行控制实现计算器

现在我们通过对命令行输入的不同,实现一个加减乘除的计算机。

方法为  ./可执行程序  -算法符号  数字1  数字2

具体代码如下,首先我们控制argc的参数个数,保证是4个参数才继续执行,否则告诉用户输入错误,得按照制定的格式使用。需要注意我们命令行输入的是字符串,因此需要转成整数处理

#include<stdio.h>                                                                        
#include<string.h>
#include<stdlib.h>
int main(int argc,char* argv[])    
{    if(argc!=4)    {    printf("输入格式错误,使用方法:%s op[-add|sub|mul|div] d1 d2\n",argv[0]);    return 1;    }    int x = atoi(argv[2]);    int y = atoi(argv[3]);    if(strcmp(argv[1],"-add")==0)    {    printf("%d+%d=%d\n",x,y,x+y);    }    else if(strcmp(argv[1],"-sub")==0)    {    printf("%d-%d=%d\n",x,y,x-y);    }    else if(strcmp(argv[1],"-mul")==0)    {    printf("%d*%d=%d\n",x,y,x*y);    }    else if(strcmp(argv[1],"-div")==0)    {    if(y == 0) printf("被除数不能为0\n");    else printf("%d/%d=%d\n",x,y,x/y);    }    else    {    printf("输入格式错误,使用方法:%s op[-add|sub|mul|div] d1 d2\n",argv[0]);    return -1;                                                                       }return 0;
}

我们编译后运行, 正确的格式才会进行运算。错误的会告诉我们使用方法。

到这一步我们对命令行指令就更加清晰了,所谓的 ls/mv/mkdir 等等指令,本质上就是可执行程序,我们在后面添加的 -a -r 等等选项,都是通过main的参数来进行控制的,输入相应的选项就能得到相应的效果。

三、实现touch指令

 我们根据之前学的内容,想必模拟一下touch指令也很简单了。胆码如下

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{if(argc != 2){printf("touch指令格式不对\n");return 1;}FILE *fp = fopen(argv[1],"a");if(fp == NULL){perror("打开失败");                                                      return -1;}fclose(fp);return 0;
}

测试一下,成功创建。 

 

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

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

相关文章

【语音合成】中文-多情感领域-16k-多发音人

模型介绍 语音合成-中文-多情感领域-16k-多发音人 框架描述 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用&#xff0c;故此处仅涉及参数法。 参数TTS系统可分为两大模块&#xff1a;前端和后端。 前端包含文本正则、分词、多音字预…

【C++】构造函数、初始化列表,析构函数,拷贝构造函数,运算符重载

注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载。 目录 注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载…

2024无参考图像的清晰度评价方法

无参考图像质量评价算法 无参考图像质量评价是指参考图像不存在的情况下&#xff0c;直接计算失真图像的视觉质量。根据无参考图像质量评价模型在计算图像视觉质量时是否需要图像的主观分数来进行训练&#xff0c;无参考图像质量评价算法可分为基于监督学习的无参考图像质量评价…

2024-02-06 TCP/UDP work

1. 画出TCP三次握手和四次挥手的示意图&#xff0c;并且总结TCP和UDP的区别 三次握手&#xff1a; 4次挥手&#xff1a; tcp/udp区别 TCP 1. 稳定&#xff0c;提供面向连接的&#xff0c;可靠的数据传输服务 2. 传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、…

IDEA 配置以及一些技巧

1. IDEA设置 1.1 设置主题 1.2 设置字体和字体大小 1.3 编辑区的字体用ctrl鼠标滚轮可以控制大小 1.4 自动导包和优化多余的包 1.5 设置编码方式 1.6 配置 maven 1.7 设置方法形参参数提示 1.8 设置控制台的字体和大小 注意&#xff1a;设置控制台字体和大小后需要重启IDEA才会…

第1章 认识Flask

学习目标 了解Flask框架&#xff0c;能够说出Flask框架的发展史以及特点 熟悉隔离Python环境的创建方式&#xff0c;能够独立在计算机上创建隔离的Python环境 掌握Flask的安装方式&#xff0c;能够独立在计算机上安装Flask框架 掌握PyCharm配置隔离环境的方式&#xff0c;能…

【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 命名空间 命名空间的定义 命名空间的使用 命名空间的嵌套使用 C输入&输出 std命名空间的使用惯例&…

C语言第二十弹---指针(四)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、字符指针变量 2、数组指针变量 2.1、数组指针变量是什么&#xff1f; 2.2、数组指针变量怎么初始化 3、⼆维数组传参的本质 4、函数指针变量 4.1…

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

二进制安全虚拟机Protostar靶场(8)heap3 Fastbins unlink exploit

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 heap3 程序静态分析 https://exploit.education/protostar/heap-three/#include <stdlib.h> #include …

故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab) 模型描述 时间卷积神经网络(TCN)是一种用于序列数据建模和预测的深度学习模型。它通过卷积操作在时间维度上对序列数据进行特征提取,并且可以处理可变长度的输入序列。 要使用TCN进行…

3D室内虚拟灭火体验为预防火灾提供全新方案

室内火灾常见于充电器未拔、电动车、油锅起火及煤气泄露等原因&#xff0c;由于室内空间小、易燃物多&#xff0c;因此极易造成较大的人员财产损失&#xff0c;3D仿真还原技术、通过1&#xff1a;1模拟还原火灾发生全过程&#xff0c;火灾VR安全培训提供全方位、真实感强的模拟…

FlinkSql 窗口函数

Windowing TVF 以前用的是Grouped Window Functions&#xff08;分组窗口函数&#xff09;&#xff0c;但是分组窗口函数只支持窗口聚合 现在FlinkSql统一都是用的是Windowing TVFs&#xff08;窗口表值函数&#xff09;&#xff0c;Windowing TVFs更符合 SQL 标准且更加强大…

Java中JVM常用参数配置(提供配置示例)

目录 前言一、内存参数配置二、垃圾收集器配置三、GC策略配置3.1、基础通用配置3.2、Parallel 和 Parallel Old 常用参数配置3.3、CMS 常用参数配置3.4、G1 常用参数配置 四、GC日志配置五、dump 日志参数配置5.1、OutOfMemory异常时生成dump文件5.2、发生Full GC时生成dump文件…

QT安装与helloworld

文章目录 QT安装与helloworld1.概念&#xff1a;2.安装QT3.配置环境变量4.创建项目5.运行效果 QT安装与helloworld 1.概念&#xff1a; Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处&#xff1a;提供首个专为支持跨平台开发而设计的…

在Python中执行Linux Shell脚本详解

概要 随着 Python 的增长和普及,目前它已经成为自动化各种任务,包括执行 shell 脚本的主要工具。这篇文章将详细描述如何在 Python 中执行 shell 脚本,并提供丰富的示例帮助你理解和实践。 什么是Shell脚本? Shell脚本是一个由命令行解释器执行的文本文件。这些脚本包含控…

数据结构第九天(堆排序)

目录 前言 概述 源码&#xff1a; 主函数&#xff1a; 运行结果&#xff1a; 其他 前言 哈哈&#xff0c;这个堆排序算法很久之前就已经敲过一遍了&#xff0c;时间一久&#xff0c;思路有点淡忘。今天重新看过一遍之后&#xff0c;又亲自撸代码&#xff0c;幸运的是&am…

【MATLAB源码-第137期】基于matlab的NOMA系统和OFDMA系统对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 NOMA&#xff08;非正交多址&#xff09;和OFDMA&#xff08;正交频分多址&#xff09;是两种流行的无线通信技术&#xff0c;广泛应用于现代移动通信系统中&#xff0c;如4G、5G和未来的6G网络。它们的设计目标是提高频谱效…

如何使用C#调用LabVIEW算法

新建一个工程 这是必须的&#xff1b; 创建项目 项目 点击完成&#xff1b; 将项目另存为&#xff1b;方便后续的使用&#xff1b; 创建 一个测试VI 功能很简单&#xff0c;用的一个加法&#xff1b;将加数A&#xff0c;B设置为输入&#xff0c;和C设置为输出&#xff0c;…

正点原子--STM32通用定时器学习笔记(2)

1. 通用定时器输入捕获部分框图介绍 捕获/比较通道的输入部分&#xff08;通道1&#xff09; 输入通道映射CC1S[1:0]→采样频率CKD[1:0]→滤波方式IC1F[3:0]→边沿检测方式CC1P→捕获分频ICPS[1:0]→使能捕获CC1E 输入部分对相应的TIx输入信号采样&#xff0c;并产生一个滤波后…