【Linux】:命令行参数

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

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

数据结构专栏:数据结构****

个 人 主 页 :stackY、****

C + + 专 栏 :C++****

Linux 专 栏 :Linux****

目录

[1. 命令行参数](#1. 命令行参数)

[1.1 命令行参数是什么](#1.1 命令行参数是什么)

[1.2 实现命令行版的计算器](#1.2 实现命令行版的计算器)

[1.3 自定义实现基本指令](#1.3 自定义实现基本指令)


1. 命令行参数

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

  • 在Linux系统中,一个进程(包括mian函数)是通过父进程fork出子进程然后开始执行的;
  • 在C语言程序中,没有其他函数直接调用mian函数;main函数的执行代表了整个程序的开始,而程序的结束则是通过main函数的返回值来表示。
    其实在我们Linux系统中,mian函数也是可以带参数的;
cpp 复制代码
int main(int argc, char * argv[])

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

cpp 复制代码
#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

cpp 复制代码
#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命令

cpp 复制代码
#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小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩4 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言