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)。
执行以下命令进行测试:
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\n”, opt); break; case ‘b’: printf(“%c, %s\n”, opt, optstring); break; case ‘c’: printf(“%c, %s\n”, opt, optstring); break; case ‘d’: printf(“%c, %s\n”, opt); break; } } return 0; }
执行以下命令进行测试:
a d b, 200 c, 300