getopt和getoptlong被用来解析命令行参数。
 
一、getopt
#include <unistd.h>
extern char *optarg;
extern int optind,
extern int opterr,
extern int optopt;
int getopt(int argc, char * const argv[], const char *optstring);

定义了四个全局变量:optarg是选项的参数指针,optind记录目前查找的位置,当opterr = 0时,getopt不向stderr输出错误信息。当命令选项字符不包括在optstring中或者缺少必要的参数时,该选项存储在optopt中,getopt返回 '?'

     getopt调用一次,返回一次选项,当检查不到参数时,返回-1,同时,optind储存第一个不包含选项的命令行参数。
     optstring参数可以有以下元素。
     1.单个字符:表示选项
     2.单个字符后接一个冒号:表示该选项必须跟一个参数,参数紧跟在选项后,或以一个空格隔开,将参数的指针赋给optarg。
     3.单个字符后跟两个冒号:表示该选项必须跟一个参数,且不能用空格隔开。
例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> int main(int argc, char **argv)
{
int opt = ; while ((opt = getopt(argc, argv, "if:?lr::")) != -)
{
switch(opt)
{
case 'i':
case 'l':
printf("option: %c\n", opt);
break;
case 'f':
printf("filename: %s\n", optarg);
break;
case 'r':
printf("arg:%s\n", optarg);
break;
case ':':
printf("option needs a value\n");
break;
case '?':
printf("unknow option: %c\n", optopt);
break;
}
} for (; optind < argc; optind++)
{
printf("argument: %s\n", argv[optind]); ar return ;
}
     二、getoptlong
     getoptlong就是添加了对长选项支持的getopt,getoptlong比getopt多两个参数,struct option *longopts和int *longindex,后者用到的少,一般置为NULL。直接来看struct option 结构
struct option
{
char *name;
int has_arg;
int *flag;
int val;
};
     name表示的是长参数名,has_arg有三个值,当has_arg = no_argument(即0)时,表示该参数后面不跟参数值,当has_arg = required_argument(即1)时,表示参数后面一定跟参数值,当has_arg = optional_argument(即2)时,表示该参数后面可跟参数值,也可不跟。flag   当这个指针为空的时候,函数直接将val的数值从getopt_long的返回值返回出去,当它非空时,val的值会被赋到flag指向的整型数中,而函数返回值为0 。 val    用于指定函数找到该选项时的返回值,或者当flag非空时指定flag指向的数据的值。
定义option試例:
struct option longopts[] =
{
{"initialize", , NULL, 'i'},
{"filename", , NULL, 'f'},
{"list", , NULL, 'l'},
{"restart", , NULL, 'r'}
};
例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> #define _GNU_SOURCE
#include <getopt.h> int main(int argc, char **argv)
{
int opt; struct option longopts[] =
{
{"initialize", , NULL, 'i'},
{"filename", , NULL, 'f'},
{"list", , NULL, 'l'},
{"restart", , NULL, 'r'}
}; while ((opt = getopt_long(argc, argv, ":if:lr", longopts, NULL)) != -)
{
switch(opt)
{
case 'i':
case 'l':
case 'r':
printf("option: %c\n", opt);
break;
case 'f':
printf("filename: %s\n", optarg);
break;
case ':':
printf("option needs a value\n");
break;
case '?':
printf("unknow option: %c\n", optopt);
break;
}
} for (; optind < argc; optind++)
{
printf("argument: %s\n", argv[optind]); } return ;
}

getopt,getoptlong学习的更多相关文章

  1. windows下的getopt/getoptlong函数

    windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数 ...

  2. windows下的getopt/getoptlong函数(拷贝GNU C的库函数)

    http://www.cnblogs.com/oloroso/p/4856104.html

  3. webbench源码学习-->命令行选项解析函数getopt和getopt_long函数

    对于webbench这个网站压力测试工具网上介绍的很多,有深度详解剖析的,对于背景就不在提了, 听说最多可以模拟3万个并发连接去测试网站的负载能力,这里主要是学习了一下它的源码,做点 笔记. 官方介绍 ...

  4. python getopt学习记录

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

  5. getopt模块的学习

    在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能.目前有短选项和长选项两种格式.短选项格式为"-"加上单个字母选项:长选项为"--"加 ...

  6. getopt 学习

    https://www.cnblogs.com/qingergege/p/5914218.html

  7. 软件工程线上课程(C语言实践篇)学习心得总结

    林牧 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 软件工程的理 ...

  8. 软件工程(C编码实践)学习总结及心得

    徐礼超  原创作品转载请注明出处:http://www.cnblogs.com/xulichao <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com ...

  9. 命令行选项解析函数(C语言):getopt()和getopt_long()

    命令行选项解析函数(C语言):getopt()和getopt_long() 上午在看源码项目webbench时,刚开始就被一个似乎挺陌生函数getopt_long()给卡住了,说实话这函数没怎么见过, ...

随机推荐

  1. JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  2. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  3. Zen of Python

    Zen of Python $ python Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit ...

  4. MSSQLSERVER执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

  5. JavaScript 中对变量和函数声明的“提前”

    变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或 ...

  6. 3、C#核心编程结构下

     本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西: 这一小节是上一小节的补充,主要涉及到一下的知识细节: 1.C#方法的各种细节 2.探讨out ...

  7. Linux平台oracle 11g单实例 安装部署配置 快速参考

    1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 7 oinstall groupadd ...

  8. markdown常用语法总结

    转自markdown示例[模板] 1.1.段落标题 根据原文中的文档标题可以对应设置标题. # 一级标题## 二级标题### 三级标题 效果 => 一级标题 二级标题 三级标题 1.2.斜体.加 ...

  9. The Java Enum: A Singleton Pattern [reproduced]

    The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...

  10. 利用javascript跨域访问cookie之广告推广

    在上一篇<说一说javascript跨域和jsonp>中,利用JSONP进行了跨域的数据访问,利用JS本身的跨域能力在远端生成HTML结构的方式完成了一个小广告. 在实际应用中, 跨域使用 ...