当前位置: 首页 > news >正文

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;
}

测试一下,成功创建。 

 

相关文章:

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

目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al &#xff0c;可以查看当前文件夹下所有文件的信息&#xff0c;还有其他的如rm&#xff0c;touch等指令&#xff0c;都可以帮我们完成相应的操作。 其实运行这些…...

LLM少样本示例的上下文学习在Text-to-SQL任务中的探索

导语 本文探索了如何通过各种提示设计策略&#xff0c;来增强大型语言模型&#xff08;LLMs&#xff09;在Few-shot In-context Learning中的文本到SQL转换能力。通过使用示例SQL查询的句法结构来检索演示示例&#xff0c;并选择同时追求多样性和相似性的示例可以提高性能&…...

双非本科准备秋招(19.2)—— 设计模式之保护式暂停

一、wait & notify wait能让线程进入waiting状态&#xff0c;这时候就需要比较一下和sleep的区别了。 sleep vs wait 1) sleep 是 Thread 方法&#xff0c;而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用&#xff0c;但 wait 强制和 s…...

使用SpringMVC实现功能

目录 一、计算器 1、前端页面 2、服务器处理请求 3、效果 二、用户登陆系统 1、前端页面 &#xff08;1&#xff09;登陆页面 &#xff08;2&#xff09;欢迎页面 2、前端页面发送请求--服务器处理请求 3、效果 三、留言板 1、前端页面 2、前端页面发送请求 &…...

spring aop实现接口超时处理组件

文章目录 实现思路实现代码starter组件 实现思路 这里使用FutureTask&#xff0c;它通过get方法以阻塞的方式获取执行结果&#xff0c;并设定超时时间&#xff1a; public V get() throws InterruptedException, ExecutionException ;public V get(long timeout, TimeUnit un…...

c++设计模式之装饰器模式

作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…...

WordPress如何实现随机显示一句话经典语录?怎么添加到评论框中?

我们在一些WordPress网站的顶部或侧边栏或评论框中&#xff0c;经常看到会随机显示一句经典语录&#xff0c;他们是怎么实现的呢&#xff1f; 其实&#xff0c;boke112百科前面跟大家分享的『WordPress集成一言&#xff08;Hitokoto&#xff09;API经典语句功能』一文中就提供…...

【退役之重学前端】vite, vue3, vue-router, vuex, ES6学习日记

学习使用vitevue3的所遇问题总结&#xff08;2024年2月1日&#xff09; 组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来&#xff0c;导致使用不了&#xff0c;出现以下报错 这是因为&#xff0c;如果不用setup&#xff0c;就得使用 export default…...

[linux]-总线,设备,驱动,dts

1. 总线BUS 在物理层面上&#xff0c;代表不同的工作时序和电平特性&#xff1a; 总线代表着同类设备需要共同遵守的工作时序&#xff0c;不同的总线对于物理电平的要求是不一样的&#xff0c;对于每个比特的电平维持宽度也是不一样&#xff0c;而总线上传递的命令也会有自己…...

python3实现gitlab备份文件上传腾讯云COS

gitlab备份文件上传腾讯云COS 脚本说明脚本名称&#xff1a;upload.py 假设gitlab备份文件目录&#xff1a;/opt/gitlab/backups gitlab备份文件格式&#xff1a;1706922037_2024_02_06_14.2.1_gitlab_backup.tar1.脚本需和gitlab备份文件同级目录 2.根据备份文件中的日期判断…...

292.Nim游戏

桌子上有一堆石头。 轮流进行自己的回合&#xff0c; 你作为先手 。 每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数&#xff0c;来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可…...

Spring和Spring Boot的区别

Spring 是一个轻量级的 Java 开发框架&#xff0c;它提供了一系列的模块和功能&#xff0c;例如 IoC&#xff08;控制反转&#xff09;、AOP&#xff08;面向方面编程&#xff09;、数据库访问、Web 开发等。Spring 的目标是使 Java 开发更加简单、高效和可维护。 Spring Boot …...

备战蓝桥杯---动态规划(理论基础)

目录 动态规划的概念&#xff1a; 解决多阶段决策过程最优化的一种方法 阶段&#xff1a; 状态&#xff1a; 决策&#xff1a; 策略&#xff1a; 状态转移方程&#xff1a; 适用的基本条件 1.具有相同的子问题 2.满足最优子结构 3.满足无后效性 动态规划的实现方式…...

FPGA_ip_pll

常使用插件管理器进行ip核的配置&#xff0c;ip核分为计算&#xff0c;存储&#xff0c;输入输出&#xff0c;视频图像处理&#xff0c;接口&#xff0c;调试等。 一 pll ip核简介 pll 即锁相环&#xff0c;可以对输入到fpga的时钟信号&#xff0c;进行分频&#xff0c;倍频&…...

【实验3】统计某电商网站买家收藏商品数量

文章目录 一、实验目的和要求∶二、实验任务∶三、实验准备方案,包括以下内容:实验内容一、实验环境二、实验内容与步骤(过程及数据记录):三、实验结果分析、思考题解答∶四、感想、体会、建议∶一、实验目的和要求∶ 现有某电商网站用户对商品的收藏数据,记录了用户收藏…...

【Qt】Android上运行keeps stopping, Desktop上正常

文章目录 问题 & 背景背景问题 解决方案One More ThingTake Away 问题 & 背景 背景 在文章【Qt】最详细教程&#xff0c;如何从零配置Qt Android安卓环境中&#xff0c;我们在Qt中配置了安卓开发环境&#xff0c;并且能够正常运行。 但笔者在成功配置并完成上述文章…...

算法学习打卡day47|单调栈系列题目

单调栈题目思路 通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置&#xff0c;此时我们就要想到可以用单调栈了。时间复杂度为O(n)。单调栈的本质是空间换时间&#xff0c;因为在遍历的过程中需要用一个栈来记录右边第一个比当前元…...

Maven构建OSGI+HttpServer应用

Maven构建OSGIHttpServer应用 官网&#xff08;https://eclipse.dev/equinox/server/http_in_equinox.php&#xff09;介绍有两种方式&#xff1a; 一种是基于”org.eclipse.equinox.http”包的轻量级实现&#xff0c;另一种是基于”org.eclipse.equinox.http.jetty”包&#…...

chrome扩展插件常用文件及作用

Chrome扩展通常包含以下常用文件及其作用&#xff1a; manifest.json&#xff1a; 描述了扩展的基本信息&#xff0c;如名称、版本、权限、图标等。定义了扩展的各种组件和功能&#xff0c;包括后台脚本、内容脚本、页面、浏览器动作按钮等。 background.js&#xff1a; 后台脚…...

PdfFactory Pro软件下载以及序列号注册码生成器

PdfFactory Pro注册机是一款针对同名虚拟打印机软件所推出的用户名和序列号生成器。PdfFactory Pro是一款非常专业的PDF虚拟打印软件&#xff0c;通过使用这款注册机&#xff0c;就能帮助用户免费获取注册码&#xff0c;一键激活&#xff0c;永久免费使用。 pdffactory7注册码如…...

Qwen3.5-4B-Claude推理模型在算法面试辅导中的实战:分步推导+代码示例生成

Qwen3.5-4B-Claude推理模型在算法面试辅导中的实战&#xff1a;分步推导代码示例生成 1. 模型介绍与核心能力 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专门针对推理任务优化的AI模型&#xff0c;它基于Qwen3.5-4B架构&#xff0c;通过蒸馏训练强化了结构化…...

STM32串口环形队列IAP固件更新方案

基于STM32串口环形队列的IAP实现方案1. 项目概述1.1 系统架构本方案实现了一种基于STM32F103C8T6微控制器的串口IAP(In-Application Programming)系统&#xff0c;采用环形队列缓冲机制解决有限SRAM空间下的固件更新问题。系统将64KB Flash空间划分为四个功能区域&#xff1a;B…...

Zotero Style插件:如何通过3个核心功能让文献管理效率提升200%?

Zotero Style插件&#xff1a;如何通过3个核心功能让文献管理效率提升200%&#xff1f; 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员…...

2025夏季技术实习「抢位战」:3步解锁2500+优质机会(附避坑指南)[特殊字符]

2025夏季技术实习「抢位战」&#xff1a;3步解锁2500优质机会&#xff08;附避坑指南&#xff09;&#x1f525; 【免费下载链接】Summer2026-Internships 2025年夏季技术实习机会集合&#xff01; 项目地址: https://gitcode.com/GitHub_Trending/su/Summer2026-Internships…...

【CPython内存管理白皮书级解析】:从PyObject到ob_refcnt,看懂泄漏发生的底层5层机制

第一章&#xff1a;CPython内存管理的底层基石与泄漏本质CPython 的内存管理并非依赖操作系统级 malloc/free 的直接映射&#xff0c;而是构建在三层抽象之上的精密系统&#xff1a;最底层为系统内存分配器&#xff08;如 mmap 或 malloc&#xff09;&#xff0c;中间层为 CPyt…...

3个关键步骤:Smiley Sans字体技术优化指南

3个关键步骤&#xff1a;Smiley Sans字体技术优化指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans&#xff1a;一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 在当今数字化时代&#xff0c;网页性能直…...

如何快速下载Google Drive受保护PDF:终极免费解决方案指南

如何快速下载Google Drive受保护PDF&#xff1a;终极免费解决方案指南 【免费下载链接】Google-Drive-PDF-Downloader 项目地址: https://gitcode.com/gh_mirrors/go/Google-Drive-PDF-Downloader 你是否经常遇到Google Drive中那些"仅查看"权限的PDF文件&am…...

OpenClaw技能商店:基于nanobot开发并分享自定义模块

OpenClaw技能商店&#xff1a;基于nanobot开发并分享自定义模块 1. 为什么要开发OpenClaw技能 去年夏天&#xff0c;我发现自己每天要花大量时间处理重复性的文件整理工作——下载各种技术文档&#xff0c;按日期和项目分类存储&#xff0c;再手动生成目录索引。当我第三次在…...

DeepSeek-OCR-2开发者案例:集成至RAG系统实现图文混合检索增强

DeepSeek-OCR-2开发者案例&#xff1a;集成至RAG系统实现图文混合检索增强 1. 项目背景与需求 最近在做一个智能文档问答系统&#xff0c;客户的需求很明确&#xff1a;他们有很多PDF文档&#xff0c;里面既有文字又有图片&#xff0c;用户提问时&#xff0c;系统要能同时理解…...

别再只盯着PID了!用MATLAB的musyn命令,5步搞定复杂不确定系统的鲁棒控制器设计

别再只盯着PID了&#xff01;用MATLAB的musyn命令&#xff0c;5步搞定复杂不确定系统的鲁棒控制器设计 当你的无人机在强风环境下出现姿态抖动&#xff0c;或者工业机械臂负载突变时产生振荡&#xff0c;传统PID控制器往往显得力不从心。这类具有参数不确定性、动态扰动的多变量…...