getopt是linux下获取程序启动参数的函数

       #include <unistd.h>

int getopt(int argc, char * const argv[],
                  const char *optstring);

extern char *optarg;
       extern int optind, opterr, optopt;

使用了全局参数optarg, optind,opterr, optopt这几个,其中optarg用来保存解析出来的选项参数
下面是一个例子
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;

int main(int argc, char** argv)
{
    int opt = 0;

while(-1  !=  (opt = getopt(argc, argv, "n:t:kl")))
    {
        switch(opt)
        {
            case 'n':
                fprintf(stdout, "n:%s\n", optarg);
            break;
            case 't':
                fprintf(stdout, "t:%s\n", optarg);
            break;
            case 'k':
                fprintf(stdout, "k option get\n");
            break;
            case 'l':
                fprintf(stdout, "l option get\n");
            break;
        }
    }

return 0;
}

这段代码意图解析带有参数和不带有参数的命令选项,其中n和t和带有参数的,k和l是不带有参数的,getopt通过识别第三个参数的格式来区分,n和t后面有冒号,表示选项带有参数,k和l没有。
测试一下这段代码对符合要求的命令行的解析和不符合要求的命令行的解析
smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t  vi  -k 30  -l 80
n:100
t:vi
k option get
l option get
smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t  vi  -k   -l
n:100
t:vi
k option get
l option get
smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t   -k   -l
n:100
t:-k
l option get
smi /project/bm3.5/smi/test/zd/self>tg -n
tg: option requires an argument -- n
smi /project/bm3.5/smi/test/zd/self>tg -n -t
n:-t
smi /project/bm3.5/smi/test/zd/self>tg -o  -n 100
tg: invalid option -- o
n:100
可以看到,解析不尽如人意,在k和l带有多余参数的时候没有报错,这个还可以理解,但在n和t命令少带参数的时候就应该报错,而不是把后面的命令作为参数给解析了。多余的o命令报错还是处理正确的。
这个命令使用比较方便,但有一定的局限性。

getopt使用例子的更多相关文章

  1. linux —— shell 编程(编程语法)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...

  2. getopt例子

    (本例基于win7 + python3.4) import getopt, sys ''' getopt 模块专门用来处理命令行参数 函数 getopt(args, shortopts, longop ...

  3. getopt,getoptlong学习

         getopt和getoptlong被用来解析命令行参数.   一.getopt #include <unistd.h> extern char *optarg; extern i ...

  4. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

  5. 【python】getopt使用

    来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...

  6. PHP函数getopt详解

    短参数 它返回一个包含命令行参数的数组.比如,要获得-a -b 和-c的值,可以这么做: $arguments = getopt("a:b:c:"); 可以用下面的方式运行脚本(有 ...

  7. Python 命令行参数和getopt模块详解

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

  8. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数

    我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数 ...

  9. [Perl] Getopt 函数来接收用户参数的使用

    我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参 ...

随机推荐

  1. HDU 3467 (求五个圆相交面积) Song of the Siren

    还没开始写题解我就已经内牛满面了,从晚饭搞到现在,WA得我都快哭了呢 题意: 在DotA中,你现在1V5,但是你的英雄有一个半径为r的眩晕技能,已知敌方五个英雄的坐标,问能否将该技能投放到一个合适的位 ...

  2. c++实现输入法窗口自定义的代码

    #pragma once #include <Windows.h> #include <imm.h> #include <string> #pragma comme ...

  3. SELECT样式,兼容IE6

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. [持续更新]android stduio的一些小技巧

    1.导入第三方jar 无法和eclipse一样可以直接刷新就可以导入libs里的jar,要到jar文件上右键按add jar. 2.其他依赖项目里有support-v4包的时候 在Libs里还是要有s ...

  5. SQL 的一些概念问答

    1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以联级运算.如, ...

  6. MorningSale 使用帮助

    待添加     http://121.37.42.173:8080/morningsale

  7. 欧拉图 CCF2016第六次 送货

    // 欧拉图 CCF2016第六次 送货 // 思路: // CCF数据很水....这道题有问题 // 先判连通,再dfs边. // 应为输出要满足字典序最小,用vector存图,sort一遍,用st ...

  8. Mysql视图的作用及其性能分析

    定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...

  9. java计时代码

    public class Test{ public static void main(String[] args) { long startMili=System.currentTimeMillis( ...

  10. leetcode@ [316] Remove Duplicate Letters (Stack & Greedy)

    https://leetcode.com/problems/remove-duplicate-letters/ Given a string which contains only lowercase ...