linux命令行解析函数介绍

函数原型:
        int getopt(int argc,char * const argv[ ],const char * optstring);
        给定了命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字符串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有识别到的选项,将返回 -1,此任务就完成了。
头文件:
        #include<unistd.h>
全域变量:
        extern char *optarg——指向当前选项参数(如果有)的指针。
        extern int optind——再次调用 getopt() 时的下一个 argv 指针的索引。
        extern opterr, optoptt——最后一个未知选项。
参数介绍:
        argc和argv:这两个参数就是main函数中的两个参数,可直接使用。
        optstring: optstring是选项字母组成的字串。optstring中的指定的内容的意义(例如getopt(argc, argv, "ab:c:de::");)
        1.单个字符,表示选项,(如上例中的abcde各为一个选项)。
        2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。(如上例中的b:c:)。
        3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::,如果没有跟参数,则optarg = NULL)。

        如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optarg设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
<span id="transmark"></span>if(argc == 1) {
              printf(“error 1”);
              return 0;
        }

        int opt;
        const char *optstring = “ab:c::d”;

        while((opt = getopt(argc, argv, optstring)) != -1) {
              switch(opt) {
                     case ‘a’: printf(“%c
”, opt); break;
                     case ‘b’: printf(“%c, %s
”, opt, optstring); break;
                     case ‘c’: printf(“%c, %s
”, opt, optstring); break;
                     case ‘d’: printf(“%c, %s
”, opt); break;
              }
        }
        return 0;
}

执行以下命令进行测试:

a 
d 
b, 200
c, 300


原文地址:https://www.cnblogs.com/xuwq/p/5014734.html