头文件:/usr/include/getopt.h

函数传入较长参数

函数getopt_long_onlygetopt_long两者用法差不多,都可以用来解析命令行选项

函数出处
#include <getopt.h> //getopt_long()头文件位置
int getopt_long (int ___argc, char *const *___argv,  const char *__shortopts,  const struct option *__longopts, int *__longind);
int getopt_long_only (int ___argc, char *const *___argv,  const char *__shortopts,  const struct option *__longopts, int *__longind);
短选项 长选项 是否需要参数
-n –username 是(用户名)
-d –debug
参数
  • argcv,argv :main函数传递的参数

  • shortopts:短项字符串,如"hn:jk:p:s:o:m:ti:va",短项字符串不需要’-‘标记,短选项需要传递参数的时候后面加上’:’

  • longopts,长选项数组,存放长选项参数

    struct longopts{const char *name;//长选项名int has_arg;//是否需要参数int * flag;int val;
    };
    
  • longind:于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL

har_arg 选项有三种情况

define no_argument 0 //不需要参数

define required_argument 1 //必须指定参数

define optional_argument 2 //参数可选

flag和val相互依赖,主要有如下情况

  • flag为NULL,val值用于确定该长选项,所以需要为长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁
  • flag不为NULL,则将val值存放到flag所指向的存储空间,用于标识该长选项出现过
返回值
  • 程序中使用短选项,则返回短选项字符(如‘n’),当需要参数是,则在返回之前将参数存入到optarg中
  • 程序中使用长选项,返回值根据flag和val确定。当flag为NULL,则返回val值。所以根据val值做不同的处理,这也说明了val必须唯一。当val值等于短选项值,则可以使用短选项解析函数解析长选项;当flag不为NULL,则将val值存入flag所指向的存储空间,getopt_long返回0
  • 出现未定义的长选项或者短选项,getopt_long返回?
  • 解析完毕,getopt_long返回-1
全局参数:可以用在头文件作用域处
  • extern char * optarg 用于获取以上解析函数识别的参数选项后的数值
  • extern int optind 获取以解析函数执行过程中的剩余参数个数。
  • extern int opterr 解析函数遇到无法解析的命令,会将错误标记0返回至该值
  • extern int optopt为解析函数设置一个未识别的字符选择

C语言解析命令行函数:getopt系列相关推荐

  1. C语言中使用库函数解析命令行参数

    在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...

  2. 从源码的角度看Go语言flag库如何解析命令行参数!

    我上周五喝酒喝到晚上3点多,确实有点罩不住啊,整个周末都在休息和睡觉,文章鸽了几天,想不到就有两个人跑了. 不得不感叹一下,自媒体的太残酷了,时效就那么几天,断更就没人爱.你们说好了爱我的,爱呢?哼 ...

  3. Go语言中命令行参数的实现

    为什么80%的码农都做不了架构师?>>>    在写命令行程序时,对命令参数进行解析是常见的需求.各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用.如果命令行参数纯粹自 ...

  4. python使用argparse解析命令行参数

    python使用argparse解析命令行参数 你的程序如何能够解析命令行选项(位于sys.argv中) #示意使用sys.argv进行参数解析: #注意,sys.argv中第0个索引是函数本身,所以 ...

  5. 如何在Java中解析命令行参数?

    在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...

  6. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  7. python argparse nargs_Python | 使用argparse解析命令行参数

    今天是Python专题第27篇文章,我们来聊聊Python当中的命令行参数工具argparse. 命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码 ...

  8. c语言用命令行编译运行程序_使用C程序执行系统命令

    c语言用命令行编译运行程序 Sometimes, we may need to execute Linux/Windows DOS commands through our C program. (N ...

  9. c语言学习进阶-C语言带命令行参数的文件数据批量计算

    C语言带命令行参数的文件数据批量计算 (1)假设输入文件中的数据为多行整数,把数据文件命名为"InputData.txt",也可以命名为任意的文件名,尝试设计一个c 语言程序, 主 ...

最新文章

  1. 在阿里当PM都需要做什么?
  2. 配置MOSS2007beta2的单机开发环境(下)
  3. System类的常用方法及类字段
  4. VTK:几何对象之PlanesIntersection
  5. 谨慎注意WebBrowser控件的DocumentCompleted事件
  6. uniapp连接php,thinkphp5 对接手机uni-app的unipush推送(个推)
  7. linux怎么检测文件完整性,Linux如何基于AIDE检测文件系统完整性
  8. 【转载保存】Mysql主从同步报错集锦
  9. 是什么决定了我们以何种方式赚钱?
  10. 在存储过程中构建动态SQL
  11. java stream 泛型
  12. numpy ndarray可用的常规函数
  13. 十七、创建一个 WEB 服务器(一)
  14. MATLAB【函数求导与积分】
  15. 哈佛幸福课-完美主义
  16. Android Instant Run介绍
  17. 华为ME909之4G模块的开发
  18. ps入门教程、ps修图基本工具使用方法视频教学
  19. 透视变换(perspective transformation)
  20. lyse-building otp applications

热门文章

  1. Android中实现为TextView添加多个可点击的文本
  2. 基于libmad库的MP3解码简析
  3. Windows Phone 7 Tip (5) -- App liftcycle
  4. usaco Sorting a Three-Valued Sequence 三值的排序
  5. 2018usnews计算机专业排名,2018年研究生计算机专业前50排名(美USNews版)
  6. qt 显示加速_新能源 | 吉利星越ePro上市 补贴后17.58万起售 加速更快油耗更低
  7. barmanager 不显示_广州13.3寸广告液晶显示屏品牌排行榜
  8. jsp调试java_调试从Tomcat(JSP)运行的Java程序
  9. 图像形态学(opencv),运行后通过在屏幕上输入对应指令完成相对应的形态学方法。
  10. FPGA(1)基础入门 -- 按键控制led灯