||
最近在看许师姐代码,发现她用的好多东西我都没有用过,所以打算学习一下师姐代码中用的东西。
1、int getopt(int argc, char * const argv[], const char *optsring);
给定了命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字符串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有识别到的选项,将返回 -1,此任务就完成了。
getopt() 所设置的全局变量包括:
optarg——指向当前选项参数(如果有)的指针。
optind——再次调用 getopt() 时的下一个 argv 指针的索引。
optopt——最后一个已知选项。
对于每个选项,选项字符串 (optstring) 中都包含一个对应的字符。具有参数的选项(如示例中的 -l 和 -o 选项)后面跟有一个 : 字符。示例所使用的 optstring 为 Il:o:vh?(前面提到,还要支持最后两个用于打印程序的使用方法消息的选项)。
可以重复调用 getopt(),直到其返回 -1 为止。
代码示例如下:
#include <unistd.h>
typedef map<string,string> Arguments;
string optString = "a:b:cEF";
int main(int argc, char** argv) {//argc命令行用空格隔开的string个数,argv存命令行所写的所有字符串
int c;
Arguments args;
while ( (c=getopt(argc-1, argv+1, optString.c_str())) != -1 ) {//若是第一个参数不用解析
string value = "?";
string arg(1,c);
if (optarg != NULL) {
value = string(optarg);
}
args.insert({arg,value}); // C++11标准可以用{}代替make_pair
}
}
2 getopt_long()
在#include <getopt.h>头文件中,
参考文献:
http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-7-17 21:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社