zoukankan      html  css  js  c++  java
  • Linux 主函数参数解析

    在linux中通常通过操作命令去完成日常任务,而这个命令其实就是一个工具程序,使用工具时可以通过指定选项去选择某些功能,例如查看文件列表操作ls -l。下面记录一个例子实现工具程序的参数解析功能。

    函数参数

    标准写法的主函数有两个参数,其中argc表示参数个数, argv表示字符串参数数组。鉴于需要参数分析,所以首先就可以排除掉不带参数的情况。

    int main(int argc, char **argv)
    {
        if (argc < 2)
            return -1;
    
        return 0;
    }
    

    输入说明

    任何工具都应该有一个操作说明来提示用户具体的操作,一般情况下它只有在输入错误时才被打印出来。以常见的单选项和选项附带值两类参数为例,定义以符号-指定选项,其中除-b选项外-h-d不需要选项值。

    void help(char **argv)
    {
        printf("usage: %s [-h] [-b file] [-d]\n", argv[0]);
        printf("   -h      : display usage\n");
        printf("   -b file : dump Mass Storage data to file 'file'\n");
        printf("   -d      : enable debug output\n");
    }
    

    选项探测

    首先选项是以-开头并且连着至少一个字符,当匹配到选项时循环继续。当选项需要值时,当前参数位置一定不是最后一个,并且下一个参数是以-k开头的。

    int check(int argc, char **argv)
    {
        int j;
        size_t arglen;
        bool flg_debug = false;
        bool flg_binary = false;
        bool flg_help = false;
        const char *binary_name = NULL;
    
        for (j = 1; j < argc; j++)
        {
            arglen = strlen(argv[j]);
            if ((argv[j][0] == '-') && (arglen >= 2))
            {
                switch (argv[j][1])
                {
                case 'd':
                    flg_debug = true;
                    break;
                case 'b':
                    if ((j + 1 >= argc) || (argv[j + 1][0] == '-'))
                    {
                        flg_help = true;
                        break;
                    }
                    binary_name = argv[++j];
                    flg_binary = true;
                    break;
                default:
                    flg_help = true;
                    break;
                }
            }
            else
                flg_help = true;
    
            if (flg_help)
            {
                help(argv);
                break;
            }
        }
    
        return 0;
    }
    
    
  • 相关阅读:
    location.href
    网络载入数据和解析JSON格式数据案例之空气质量监測应用
    概率dp HDU 3853
    poj2031-Building a Space Station(最小生成树,kruskal,prime)
    在JS数组指定位置插入元素
    leetcode
    leetcode笔记:Range Sum Query
    最优解算法的讨论
    NYOJ_77 开灯问题
    C++调用Lua的性能測试
  • 原文地址:https://www.cnblogs.com/llil/p/12978235.html
Copyright © 2011-2022 走看看