getopt函数的使用

在不知道这个函数之前会自己写一套函数来处理程序的输入参数。现在有了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

posted @ 2014-02-09 13:15  ZHX_1Q89  阅读(1348)  评论(0编辑  收藏  举报