getopt() 对命令行参数进行分析

getopt() 对命令行参数进行分析
int getopt( int argc, char *const argv[], const char *optstring );
        给定了命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字符串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有识别到的选项,将返回 -1,此任务就完成了。可以重复调用 getopt(),直到其返回 -1 为止.
getopt() 所设置的全局变量包括:
    optarg——指向当前选项参数(如果有)的指针。
    optind——再次调用 getopt() 时的下一个 argv 指针的索引。
    optopt——最后一个已知选项。
其中optstring 书写格式如下: "f:e:ac" , 其中':'表示前一个字符是带参数的
例子:
    #include <stdio.h>   
    #include <unistd.h> 
    #include <stdlib.h> 
     
    int main(int argc, char *argv[]){ 
        int o; 
        extern int optind, optopt, opterr; 
        extern char *optarg; 
     
        opterr = 0; 
        while((o = getopt(argc, argv, "f:e:a")) != -1){ 
            switch(o){ 
                case 'f': 
                    fprintf(stderr, "f %s \n", optarg); 
                    break; 
                case 'e': 
                    fprintf(stderr, "e %s\n", optarg); 
                    break; 
                case 'a': 
                    fprintf(stderr, "a %s\n", optarg); 
                    break; 
                case '?': 
                    if (optopt == 'f' optopt == 'e') 
                        fprintf (stderr, "Option -%c requires an argument.\n", optopt); 
                    else if (isprint (optopt)) 
                        fprintf (stderr, "Unknown option `-%c'.\n", optopt); 
                    else 
                        fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); 
                        return 1; 
                default: 
                    printf("Unknown option characte"); 
                    abort (); 
            } 
        } 
    } 
 
需要注意的是:
变量optind, optopt, opterr, optarg 都是全局变量, 外部引用, 定义时都需要加"extern"
"f:e:a"表示-f和-e有参数, -a没有参数, 编译为test,并测试
    # ./test -a 'abc' -f "abc" -e 'abc' 
    a (null) 
    f abc  
    e abc 
    # ./test -a 'abc' -f "abc" -e  
    a (null) 
    f abc  
    Option -e requires an argument. 

不过, 这样的代码还在存在问题,假如" -f"后面缺少参数, 它会误把"-e"当作"-f"的参数
    # ./test -a 'abc' -f  -e  "abc" 
    a (null) 
    f -e  

本文链接http://www.cxybl.com/html/net/winform/20120610/29307.html

时间: 2024-11-02 07:40:51

getopt() 对命令行参数进行分析的相关文章

如何分析命令行参数

如何分析命令行参数     GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符.     比如有一个命令: $ myprog -a vv --add -b --file a.txt b.txt - -- -e c.txt     在GNU/Linux系统,对这种情况的一种合理解释是:     a是短选项,带一个参数vv:     add是长选项,无参数:     b是短选项,无参数:     file是长选项,带一个参数a.txt:

Arg_parser 1.7发布 命令行参数分析工具

Arg_parser 是一个命令行参数分析工具,遵循POSIX和GNU标准.它提供了现有的C++++和Chttp://www.aliyun.com/zixun/aggregation/18713.html">语言版本的参数分析,C++版本可以作为一个C++类,能够解析配置文件的选项:同时C语言版本实现了一个单一的结构加上相关的功能.其特点是简单易用,比'getopt_long'更安全. Arg_parser 1.7该版本主要是一些轻微错误的修正.GNU编码标准已更改为引号字符.配置选项&q

在Perl中使用Getopt::Long模块来接收用户命令行参数_应用技巧

我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数有二种形式. •长参数  –help•短参数   -h也就是-和–的分别.–表示完整参数.-表示简化参数.在 Perl 的这个模块中也支持这二种方法.这要介绍的二 Getopt 其实有二个模块,一个叫 Getopt::Long 一个叫 Getopt::Std.下面就只介绍 Getopt::Long

【原创】memcached 中的命令行参数解析

     本文主要是以 memcached 源码为例,讲解如何在 linux 下解析命令行参数.  安装 memcached 后,查看其可用选项:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [root@Be

php 命令行参数详解及应用

命令行|详解 大家知道,php是一种PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页.当用户打开php页面时,服务端便执行PHP的命令并将执行结果发送至用户的浏览器中,这类似于ASP和CoildFusion,PHP可以运行在WINDOWS和多种版本的UNIX上.除了能够操作您的页面外,PHP还能发送HTTP的标题.您可以设置cookie,管理数字签名和重定向用户,而且它提供了极好的连通性到其它数据库(还有ODBC),集成各种外部库来做用PDF文档解析XML的任

Bash Getopts - 让你的脚本支持命令行参数

Bash Getopts - 让你的脚本支持命令行参数 以前我总想知道如何为我的Bash脚本创建命令行参数.经过搜索,我发现了2个函数可以处理这个问题,getopt 函数和 getopts 函数.我无意争论哪一个函数更好的.getopts 是一个shell内建命令,而且似乎比 getopt 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts. bash getopts 开始的时候,我只试着处理传递给脚本的命令行参数.最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互

PHP 命令行参数详解及应用_php技巧

复制代码 代码如下: # 不带参数的执行格式 php安装目录/bin/php scriptname.php # 带参数的执行格式 php安装目录/bin/php scriptname.php [参数1] [参数2] ..... 在scriptname.php通过$argv和$argc访问参数 # $argv(正式写法$_SERVER['argv'])数组保存着传递的全部参数,需要注意的是第一个参数$argv[0] / $_SERVER['argv'][0] 为执行脚本的名称如, scriptna

php命令行参数详解及应用PHP学习网

大家知道,php是一种PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页.当用户打开php页面时,服务端便执行PHP的命令并将执行结果发送至用户的浏览器中,这类似于ASP和CoildFusion,PHP可以运行在WINDOWS和多种版本的UNIX上.除了能够操作您的页面外,PHP还能发送HTTP的标题.您可以设置cookie,治理数字签名和重定向用户,而且它提供了极好的连通性到其它数据库(还有ODBC),集成各种外部库来做用PDF文档解析XML的任何事情.那你还

Ghost命令行参数一览表

许多人都听说过或用过Norton Ghost这个软件,然而由于它的界面全是英文的,导致许多国内网友为此而头痛.下面以它的7.0版为例,提供了Ghost的命令行参数. /?或/H:查看帮助. -CLONE:克隆. -IA:对所有分区中的扇区进行映象. -ID:对整个磁盘(包括未分区空间)进行复制. -IR:和ID一样,但不将分区调整为扇区界限. -IB:只复制磁盘的启动扇区. -IAL:对LINUX分区进行整个复制,对其它分区则用正常方法. -OR:覆盖空间并进行完整性检查. -NOLILO:复制