getopt--parse command line options
Posted yuxi_o
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getopt--parse command line options相关的知识,希望对你有一定的参考价值。
getopt解析命令行选项
getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Parse command-line options
#include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt;
其中argc和argv等同于main函数参数。
命令行选项元素(an option element)一般以-开头,之后的字符就是命令行选项字符(option characters)。重复调用getopt(),可连续得到命令行选项元素中的选项字符。
optind是下一个要处理的选项元素的索引。系统初始化optind为1,可以reset到1以重新扫描argv。
若getopt()找到另一个选项字符,返回该选项字符,并同时更新optind和nextchar。
若没有选项字符了,getopt()返回-1。optind是第一个不是选项元素的argv-element的索引。
optstring是包含选项字符的字符串。若一个字符后面有一个冒号(:),选项需要一个参数(argument),optarg指向选项字符后面的文本(如-oarg,指向arg)或后面的参数(如-o arg,指向arg)。
两个冒号表示选项有一个可选的参数,有参数时optarg指向参数,无时为0。
默认情况下,getopt()打乱argv顺序,如此所有非选项参数都在最后(如gcc foo.c -Wall, foo.c被排到最后)。
若getopt()不识别选项字符,向stderr打印错误信息,并保存字符到optopt,返回‘?’。程序可以设置opterr为0来阻止错误消息。
若getopt()找到一个选项字符不在optstring,或选项少参数,返回‘?’,并设置optopt为实际字符。optstring的第一个字符是一个冒号(:),getopt()返回’:‘来代替‘?’。
返回值
一个选项找到,getopt()返回选项字符。所有选项都解析完后,返回-1。
若一个选项不在optstring中,返回‘?’。
若选项少参数,返回值依赖于optstring第一个字符:若第一个字符为‘:’,返回‘:’,否则返回‘?’。
#include <stdio.h> #include <unistd.h> #include <stdlib.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\n", argv[0]); exit(EXIT_FAILURE); } } printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); if(optind >= argc){ fprintf(stderr, "Expected argument after options\n"); exit(EXIT_FAILURE); } printf("name argument =%s\n", argv[optind]); exit(EXIT_SUCCESS); }
以上是关于getopt--parse command line options的主要内容,如果未能解决你的问题,请参考以下文章
Linux performance monitor tool
解决AttributeError:模块'pandas'没有使用command-prompt或pycharm属性'core'