• C中使用getopt函数解析命令行参数


    1、简介

    C语言中的getopt()函数是一个功能强大的命令行解析函数,属于POSIX标准,该函数的原型如下:

    #include <unistd.h>
    
    int getopt(int argc, char *const argv[], const char *optstring);
    
    extern char *optarg;
    extern int optind, opterr, optopt;

    对于getopt()函数,前面两个函数参数和main函数传入的参数相同,可以直接从main函数传递给getopt()函数,第三个参数optstring是一种排序编码,包含了用户程序想要接收的所有单字母选项,例如,用户接收以下选项:-a -b -c,那么optstring参数就包含字符串"abc",其中的字符顺序以及字符是否存在并不重要,但是字符区分大小写。

    如果选项字符串里面的字母后接着冒号":",则表示还有相关的参数,全局变量optarg即会指向这个额外参数,如果getopt()函数找不到符合的参数则会打印出错信息,并将全局变量optopt设置为"?"字符,如果不希望getopt()函数打印出错信息,需要将全局变量opterr设置为0,全局变量optind是下一个元素的索引,用于argv,系统将此值初始化为1。

    该函数的返回值为,如果能找到符合参数的话,则返回此参数字母,如果参数不包含在optstring的选项字母,则返回"?"字符,分析结束则返回-1。

    2、getopt函数使用

    以下简单的示例程序使用getopt()函数处理两个程序选项,-n选项没有额外参数值,-t val期望一个参数值,代码如下所示:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
        int flags, opt;
        int nsecs, tfnd;
    
        nsecs = 0;
        tfnd = 0;
        flags = 0;
        while ((opt = getopt(argc, argv, "nt:")) != -1)
        {
            switch (opt)
            {
                case 'n':
                    flags = 1;
                    break;
    
                case 't':
                    nsecs = atoi(optarg);
                    tfnd = 1;
                    break;
                
                default:
                    fprintf(stderr, "Usage: %s [-t nsecs] [-n] name
    ", argv[0]);
                    exit(EXIT_FAILURE);
            }
        }
    
        printf("flags = %d, tfnd = %d, nsecs = %d, optind = %d
    ",
            flags, tfnd, nsecs, optind);
        
        if (optind >= argc)
        {
            fprintf(stderr, "Expected argument after options
    ");
            exit(EXIT_FAILURE);
        }
    
        printf("name argument = %s
    ", argv[optind]);
    
        exit(EXIT_SUCCESS);
    }

    使用下面命令进行代码编译:

    $ gcc getopt.c -o getopt

    使用下面命令运行程序:

    $ ./getopt -t 100 -n Lily

    程序运行结果如下:

    可以看到,输入的选项都被成功解析出来了。

    3、小结

    本文主要简单介绍了如何使用C中的getopt()函数来解析命令行参数。

  • 相关阅读:
    [论文阅读笔记] A Multilayered Informative Random Walk for Attributed Social Network Embedding
    [论文阅读笔记] Large-Scale Heterogeneous Feature Embedding
    [论文阅读笔记] Community-oriented attributed network embedding
    微信小程序下拉选择器(反UI的产品设计)
    浮点数
    Centos7利用rpm升级OpenSSH到openssh-8.1p1版本
    CentOS7.6使用you-get下载视频素材
    mysql5.7以后group by 报错 sql_mode=only_full_group_by的解决方法
    【MySQL】Mysql提示:Out of sort memory, consider increasing server sort buffer size
    【Python】Windows系统安装pip.whl
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/14753346.html
Copyright © 2020-2023  润新知