网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

如何给你的Linux系统添加一个新的Linux命令

时间:2023-02-15 09:40

人气:

作者:admin

标签: Shell  命令  函数  Linux系  Linux 

导读:平时我们在shell命令行上输入的命令都是应用程序,比如ls,ifconfig,vi等。我们下载的busybox源码中就包含着这些程序源码,那接下来我们来看看如何实现一个命令。...

前言

平时我们在shell命令行上输入的命令都是应用程序,比如ls,ifconfig,vi等。我们下载的busybox源码中就包含着这些程序源码,那接下来我们来看看如何实现一个命令。

如何实现

我们先分析一下其他的命令,比如gcc:

gcc helloworld.c -o helloworld

上面的编译指令中,gcc就是命令程序,然后后面的三个都是传给它的参数。程序是如何获取到参数的呢?我们都知道main函数的定义如下:

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

argc是参数个数,argv是参数值。所以大家应该都知道如何获取参数了吧。

有了参数,我们就要进行解析了。这就有两种方法:

对参数进行一个一个的判断解析

使用getopt函数进行解析

第一种方式工作量非常大,所以我们来使用第二种方式。

getopt函数介绍

#include 
int getopt(int argc, char * const argv[], const char *optstring);

argc:参数个数,直接将main函数中的argc传给该函数。

argv:参数数组,直接将main函数中的argv传给该函数。

optstring: 选项字符串。

里面还有几个额外的全局变量:

extern char *optarg;
extern int optind, opterr, optopt;

optarg: 保存选项参数

optind: 记录下一个检索位置

opterr: 是否将错误信息输出到stderr, 为0时表示不输出

optopt: 不在选项字符串optstring中的选项

选项字符串

getopt函数中有个optstring参数 ,就是选项字符串。用来指定选项,就比如上面gcc命令中的-o,它就是一个选项。

那如何给getopt传递选项字符串呢?举个例子:

a:b:cd::e

这个选项字符串对应命令行就是-a ,-b ,-c ,-d, -e选项。

冒号表示参数,一个冒号就表示这个选项后面必须带有参数。这个参数可以和选项连在一起写,也可以用空格隔开。

两个冒号的就表示这个选项的参数是可选的,既可以有参数,也可以没有参数,但要注意有参数时,参数与选项之间不能有空格。

实例

#include 
#include 
int main(int argc, char * argv[])
{
    int ch;
    printf("optind:%d,opterr:%d
", optind, opterr);
    printf("--------------------------
");
    while ((ch = getopt(argc, argv, "abde::")) != -1)
    {
        printf("optind: %d
", optind);
        switch (ch) 
        {
           case 'a':
               printf("option: -a

");   
               break;
           case 'b':
               printf("option: -b
"); 
               printf("The argument of -b is %s

", optarg);
               break;
           case 'c':
               printf("option: -c
");
               printf("The argument of -c is %s

", optarg);
               break;
           case 'd':
               printf("option: -d
");
               break;
          case 'e':
               printf("option: -e
");
               printf("The argument of -e is %s

", optarg);
               break;
          case '?':
               printf("Unknown option: %c
",(char)optopt);
               break;
        }
    }


    return 0;
}

运行结果:

0cb2b6a2-ac6f-11ed-bfe3-dac502259ad0.png

-b选项没有跟参数则报错!

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信