您的位置:首页 > 运维架构

getopt函数的使用

2014-02-09 13:15 399 查看
在不知道这个函数之前会自己写一套函数来处理程序的输入参数。现在有了getopt就可以很方便的提取命令行参数了。下面就来说说getopt的使用。

要想使用getopt这个函数,必须包含相对应的头文件,这个头文件是:unistd.h。

和getopt相关的几个变量需要我们注意:

int opterr如果这个变量不为0,那么当getopt检测到没有标识的输出参数是就会向标准打印上输出相应的信息。如果不想看到这些信息,那么在函数中只要将这个变量设置为0就好了
int optopt当getopt遇到了位置的输入选项,或者输入选项没有对应参数时,会将这个选项记录在这个变量中
int optind这个变量存储了下一个选项的起始位置
char * optarg这个变量指向了输入选项的对应参数
下面再来看看getopt的函数原型:int getopt (int argc, char *const *argv, const char *options)

argc标识选项个数,argv输入参数向量, 这两个参数对应了main函数中的两个参数。options标识了合法的选项名称。

option的规则如下,每一个字符代表了一个option,字符后面可以带有(:)和(::),分别表示该选项必须有参数和参数可选。比如“a:”标识选项a必须有对应参数,“a::”a选项后可以不加参数。

getopt每一次会返回对应的选项,返回-1表示处理结束。

#include "unistd.h"
#include "stdio.h"

int main(int argc, char **argv)
{
int opt;
opterr = 0; /* disable getopt() err info output */
while((opt=getopt(argc, argv, "xuns:"))!=-1)
{
switch(opt)
{
case 'x':
printf("%c opt has been well received\n", opt);
break;
case 'u':
printf("%c opt has been well received\n", opt);
break;
case 'n':
printf("%c opt has been well received\n", opt);
break;
case 's':
printf("%c opt has been well received\n", opt);
printf("recved str:%s\n", optarg);
break;
default:
printf("error:%c\n", optopt);/*optopt is another global virable provide by getopt, which stores unknown option*/
break;
}
}
return 0;
}


getopt函数的不足在于它能处理的选项都是单字符的(-a -b -c),如果输入选项是字符串(--verbose)那么就需要getopt_long来进行处理了。

参考文献:
http://www.gnu.org/software/libc/manual/html_node/Getopt.html#Getopt http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: