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

原文地址:https://www.cnblogs.com/llil/p/12978235.html