C-optget
作者:互联网
函数getopt()用来分析命令行参数,其函数原型和相关变量声明如下:
- extern char *optarg;
- extern int optind, // 初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项,也就是从下一个'-'的选项开始。
- extern int opterr, // 初始化值为1,当opterr=0时,getopt不向stderr输出错误信息。
- extern int optopt; // 当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回’?’。
- int getopt(int argc, char * const argv[], const char *optstring);
optarg和optind是两个最重要变量。
- optind被初始化设置指为1。
- 每调用一次getopt()函数,返回一个选项,如果该选项有参数,则optarg指向该参数。
- 在命令行选项参数再也检查不到optstring中包含的选项时,返回-1。
- 字符串optstring,它是作为选项的字符串的列表。
optstring中的格式规范如下:
-
- 单个字符,表示选项,
-
- 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
-
- 单个字符后跟两个冒号”:”,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩展)。
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
extern char *optarg; // 指向参数
extern int optind; // 指向下一个argv参数
extern int opterr;
extern int optopt; // 不能识别的字符,表示为?
int opt;
char *optstring = "a:b::"; // 一个表示必须要参数,两个表示可有可无
// 参数可有可无,必须是紧跟参数;必须要有参数de可以加空格
for (int i = 0; i < argc; i++)
{
printf("argv[%d] : %s\n", i, argv[i]);
}
putchar('\n');
while ((opt = getopt(argc, argv, optstring)) != -1)
{
switch (opt)
{
case 'a': // 用于正常执行参数项
printf("option:%c, argv:%s\n", opt, optarg);
break;
case '?': // 用于错入参数项
opterr = 0;
printf("error argc:%c, argv:%s\n", optopt, argv[optind - 1]);
case ':': // 用于参数项缺少参数输入
printf("option:%c missing argument\n", optopt);
break;
default:
printf("option:%c\n", opt);
break;
}
}
return 0;
}
标签:选项,optstring,int,argv,参数,extern,optget 来源: https://www.cnblogs.com/starc/p/16313606.html