应用程序编程---- 选项参数处理

#include <unistd.h>
处理短选项:带一个"-"。如:-a
int getopt(int argc,char *argv[],char*optstring);

optstring:选项格式字符串;选项为一个"-"后跟一个字母或数字。
单个字符,表示选项 
单个字符后接一个冒号":",表示该选项后必须跟一个参数。
单个字符后接两个冒号"::",表示该选项后跟一个可选参数。
如“1ac:d::”: 表示1,a就是不带值的参数,c是必须带值的参数,d是可选带的参数。
extern char*optarg; 指向参数的指针(根据optind变动)。
extern int optind;
是argv[]数组的索引,初始值为1,每次调用,返回一个选项optarg,并把optind置为下一个索引。
extern int opterr;  初始化为1,当opterr=0时, getopt不向stderr输出错误信息.

getopt函数每次返回选项格式字符串optstring中匹配的一个格式字符,如"1ac:d::",会返回1,a,c或d. 匹配完成后返回-1;


框架为:
int main(int argc,char*argv[])
{
        int ret=0;
     while ((opt = getopt (argc, argv, "l:s:d:Dp:hP")) != EOF)
    switch (opt)
      {
case 'P': //无参数选项
daemon = True;
break;
case 's': //带参数选项
strcpy(servicesf,optarg);
break;
case 'd': //带参数选项
DEBUGLEVEL = atoi(optarg);
break;
......
}


处理长选项:带两个“--”,如:--a
#include <getopt.h>
int getopt_long(int argc,char*argv[],const char*optstring,
const struct option*longopts,
int *longindex);

int getopt_long_only(int argc,char*argv[], const char*optstring,
const struct option*longopts, 
int*longindex);
前三个参数与getopt处理短选项参数一样。longopts为长选项数组,longindex为相应选项数组的索引。
struct option
{
const char *name; 选项名 (一般用作说明)
int  has_arg; 描述长选项是否有参数,(0:无参数,1:必选参数,2:可选参数)
int  *flag; 为空,getopt_long遇到此参数时返回val,否则返回0且该参数的值为val
int  val; 作为返回值,或者赋值给flag指向的变量
};

你可能感兴趣的:(应用程序编程---- 选项参数处理)