Unix/Linux程序设计之getopt函数浅谈

前端之家收集整理的这篇文章主要介绍了Unix/Linux程序设计之getopt函数浅谈前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Linux中getopt函数用法
1、函数作用:

getop函数用于解析命令行参数的以'-'或者‘--'开头的参数选项,除去'-'或者'--'选项元素
如果被重复调用,则它将会依次返回每个选项元素中选项字符。

2、函数原型:

#include<unistd.h>
intgetopt(intargc,char*constargv[],constchar*optstring);
externchar*optarg;
externintoptind,opterr,optopt;


其中几个全局变量的含义:
extern char *optarg:保存必须接参数的选型元素的参数,
extern int optind:指示下一个要解析的参数位置,初始值为1,
extern int opterr:设置为0将不打印错误信息。
extern int optopt:当发现无效选项字符之时,getopt()函数或返回'?'字符,或返回':'字符,并且optopt包含了所发现的无效选项字符。

3、函数参数解析:
a、int argc,char * const argv[],分别存放main函数的参数,
b、char *optstring需要解析的参数
1. 单个字符,表示选项,这里一共有t、d、c、h、q五个选项
2. 单个字符后接一个冒号“:”表示该选项后必须跟一个参数,参数紧跟在选项后或者以空格隔开
3. 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟,如果后边跟一个参数,参数必须紧跟在选项后不能以空格隔开
4、如果optstring参数的第一个字符是冒号,那么getopt()函数就会保持沉默,并根据错误情况返回不同字符,如下:
“无效选项” —— getopt()返回'?',并且optopt包含了无效选项字符(这是正常的行为)。
“缺少选项参数” —— getopt()返回':',如果optstring的第一个字符不是冒号,那么getopt()返回'?',这会使得这种情况不能与无效选项的情况区分开。

4、返回值:
如果当前处理的参数为选项参数,且该选项字符串optstring字符串中,即为定义的选项,则返回该选项字符。
如果当前处理的参数不是选项参数,则optind偏移向下一个参数,直到找到第一个选项参数为止,然后再按之前的描述操作,如果找不到选项参数,说明解析结束,则返回-1


5、测试用例:
1、最基本用法

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>

intmain(intargc,char*argv[])
{
intoc;//选项字符
char*b_opt_arg;//选项参数字符串
while((oc=getopt(argc,argv,"ngl:"))!=-1)
{
switch(oc)
{
case'n':
printf("Mynameisfengkai\n");
break;
case'g':
printf("Hernameiszhanghaun\n");
break;
case'l':
b_opt_arg=optarg;
printf("Ourloveis%s\n",b_opt_arg);
break;
}
}
return0;
}


2、加上“:”后接参数的情况:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>
intmain(intargc,b_opt_arg);
break;
case'?':
printf("arguementerror\n");
break;
}
}
return0;
}

3、参数开始加上":"根据出错情况返回:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>
intmain(intargc,char*argv[])
{
intoc;//选项字符
charec;//无效的选项字符
char*b_opt_arg;//选项参数字符串
while((oc=getopt(argc,":ngl:"))!=-1)
{
switch(oc)
{
case'n':
printf("Mynameisfengkai\n");
break;
case'g':
printf("Hernameiszhanghaun\n");
break;
case'l':
b_opt_arg=optarg;
printf("Ourloveis%s\n",b_opt_arg);
break;
case'?':
printf("arguementerror\n");
break;
case':':
printf("缺少选项参数!\n");
break;
}
}
return0;
}
原文链接:https://www.f2er.com/bash/389478.html

猜你在找的Bash相关文章