C库中提供了相应的函数接口供用户解析命令行选项,我们常使用的有getopt_long_only和getopt_long,在使用的方法上相差不大。

命令行选项中一般可以选择传递长选项和短选项

长选项的用法为: ./a.out --username bryant --help

短选项的用法为: ./a.out -n bryant -h -v

1. 函数接口

函数使用的头文件为 #include

2. 参数介绍

? argc、argv : 从main函数传递而来。

? shortopts : 短选项字符串。如“n:v”,短选项字符串不需要"-",而且短选项需要传递参数时,在短选项后面加上":"。

一般使用的时候,定义一个空的shortopts即可。

? longopts : struct option 数组,用于存放长选项参数。

struct option {

const char *name; //长选项名

int has_arg; //是否需要参数

int *flag;

int val;

};

has_arg的值有三种情况。

#define no_argument 0

#define required_argument 1

#define optional_argument 2

? longind : 用于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL。

flag和val两个值相互依赖,主要分两种情况。

(1) flag为NULL时,val值用于确定该长选项,所以需要长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁。

(2) flag不为NULL时,将val值存放到flag所指向的存储空间,用于标识该长选项出现过。

3. 返回值

? 程序中使用短选项,则返回短选项字符,例如传递-n,如果需要参数,则将参数保存在optarg中。!optarg不需要定义,在getopt.h中已经有定义

? 程序中使用长选项,则根据flag和val的值确定。当flag为NULL时,返回val值(val值必须唯一)。当value值等于短 选项的值时,可以使用短选项解析长选项;当flag不为NULL时,则将val值存入flag所指向的存储空间,此时getopt_long返回零。

? 出现未定义的长选项或短选项,则返回?

? 解析完毕,getopt_long返回 -1;

{"help", no_argument, 0, 0},

{"h", no_argument, 0, 0},

{0, 0, 0, 0}

};

while ((c = getopt_long_only(argc, argv, optstring, opts, &index)) != -1) {

printf("index = %d, c = %d\n", index, c);

switch (index) {

case 0:

case 1:

printf("username:%s\n", optarg);

break;

case 2:

case 3:

printf("version:1.0.0\n");

break;

case 4:

case 5:

printf("debug:yes\n");

break;

case 6:

case 7:

printf("help:?\n");

break;

default:

printf("other:%d\n", index);

break;

}

}

return 0;

}

如果使用如上的方式是将得到选项(长选项或短选项)在结构体数组中的位置,并将该值存放在index中。在while中判定选项的下标即可,如果需要获得参数中传递的值,则将该值保存到optarg中。

上图的程序编译之后,解析命令行选项如下图:

传递短选项:

传递长选项:

长选项短选项混合:

使用这种方式可以得到短选项的字符值,用户通过该值进行判断。

传递短选项:

传递长选项:

linux 命令行参数解析,Linux C下的命令行参数解析相关推荐

  1. linux定时情况root mail,Linux_Linux系统下mail命令使用,我经常用root帐号登录RHEL5,在 - phpStudy...

    Linux系统下mail命令使用 我经常用root帐号登录RHEL5,在终端经常出现: You have new mail in /var/spool/mail/root 这肯定是系统给root超级管 ...

  2. mysql命令行查看端口占用_linux下常用命令查看端口占用

    在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询 netstat命令各个参数说明如下: -t : 指明显示TCP端 ...

  3. linux前一个的输出作为后一个参数,将Linux命令的结果作为下一个命令的参数

    查询所有的pid并杀死. jps -l | grep bdcsc2-native-demo | awk '{print $1}' | xargs kill -9 KISS:keep it short ...

  4. 在linux系统环境中 常用的关机命令,Linux常用基础命令整理:关机命令、查看目录下文件命令等...

    整理了一些Linux常用基础命令,欢迎指正. 首先记住四个热键,学会这四个键,收益一辈子. Tab按键---命令补齐功能 Ctrl+c按键---停掉正在运行的程序 Ctrl+d按键---相当于exit ...

  5. linux系统命令pwd,linux系统下pwd命令用法详解

    linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

  6. 「SVN」Linux下svn命令使用的实践,个人记录~=傻瓜教程

    前提 从服务器上checkout项目到本地目录的时候,项目存放的位置就是当前终端所显示的目录位置,所以最好的方法是建立一个单独的svn文件夹(例如:建立一个名为"svn"的文件夹, ...

  7. Linux基础学习笔记(十二)——管道命令

    文章目录 前言 管道命令 cut命令 sort,wc,uniq命令 sort命令 uniq命令 wc命令 双向重定向--tee命令 字符替换命令 tr命令 col命令 join命令 paste命令 e ...

  8. linux 开机自动运行命令_如何在Linux终端同时运行多个Linux命令

    在一行中运行两个或多个命令可以节省大量时间,并在Linux中提高效率.在Linux中,有三种方法可以在一行中运行多个命令: ; Command 1 ; Command 2 首先运行Command1,然 ...

  9. 实验二初入linux,实验二:熟悉Linux的环境

    实验二:熟悉Linux的环境 1.实验目的 1.熟悉Linux的桌面环境: 2.了解Linux所安装的软件包 3.了解Linux的文件目录结构: 4.熟悉Linux的终端方式或文本方式下文件目录操作命 ...

  10. VMware虚拟机安装Linux系统全过程图解教程,Linux(Redhat6.4版本)

    VM[VMware Workstation Pro]虚拟机安装Linux(Redhat6.4版本) 详细步骤 下载VM虚拟机(VMware Workstation Pro)和Redhat6.4镜像 一 ...

最新文章

  1. day17 - 动态内存的分配初步理解
  2. 各类JDBC数据库连接方式
  3. SSM框架的搭建(idea)
  4. HTTP协议 ----响应消息
  5. 山西省职高计算机分数线,2020年山西五年制高职和普通中专录取分数线
  6. c语言作业帮,少训练大功课C语言
  7. 有序关系中的极大元与极小元
  8. mybatis3.2.2的一些测试
  9. MongoDB游标操作(4)
  10. (SCI分区)查SCI期刊JCR分区的图解步骤
  11. 如何提高计算机网络速度,如何提高电脑网速?
  12. Java 山上有一口缸可以装50升水,现在有15升。老和尚叫小和尚下山挑水,每次挑5升,要挑几次。
  13. K8s 集群上运行ca机制
  14. Hibernate(9)_多对一的关联映射
  15. Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
  16. 什么是真正的架构设计?十年Java经验让我总结出了这些,不愧是我
  17. 微信小程序实例:实现tabs选项卡效果
  18. 0. Office Web Apps简介
  19. 无人驾驶汽车系统入门(二十五)——基于欧几里德聚类的激光雷达点云分割及ROS实现
  20. 元的符号在计算机怎么打出来,元的符号怎么打出来,各种特殊符号的输入方法...

热门文章

  1. 【又见LCS】NYOJ-37 回文字符串
  2. vim安装vbundle
  3. #PYTHON#数据模型
  4. linux shell crontab 定时操作(转)
  5. 这10个idea小技巧,让我的开发效率提升了10倍
  6. Redis实现Mybatis的二级缓存
  7. Mysql-slowlog
  8. 整合nagios+cacti遇到问题及解决办法
  9. 【转载】C++操作符的优先级
  10. WinServer2003秘笈放送