广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详细解析命令行的getopt_long()函数
  • 582
分享到

详细解析命令行的getopt_long()函数

getopt_long 2022-11-15 22:11:14 582人浏览 薄情痞子
摘要

头文件 #include<getopt.h> 函数原型int getopt_long(int arGC,char * const argv[],const char *o

头文件
#include<getopt.h>

函数原型
int getopt_long(int arGC,char * const argv[],const char *optstring,const struct option *lonGopts,int *longindex)

函数说明
getopt被用来解析命令行选项参数。
getopt_long支持长选项的命令行解析,函数中的参数argc和argv通常直接从main()的两个参数传递而来。optstring是选项参数组成的字符串

字符串optstring可以下列元素:
1. 单个字符,表示选项,

2. 单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。

3. 单个字符后跟两个冒号,表示该选项后可以有参数也可以没有参数。如果有参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。
optstring是一个字符串,表示可以接受的参数。例如,"a:b:cd",表示可以接受的参数是a,b,c,d,其中,a和b参数后面跟有更多的参数值。(例如:-a host --b name)。

参数longopts,其实是一个结构的实例:


struct option {
const char *name; //name表示的是长参数名
int has_arg; //has_arg有3个值,no_argument(或者是0),表示该参数后面不跟参数值
// required_argument(或者是1),表示该参数后面一定要跟个参数值
// optional_argument(或者是2),表示该参数后面可以跟,也可以不跟参数值
int *flag;
//用来决定,getopt_long()的返回值到底是什么。如果flag是null,则函数会返回与该项option匹配的val值
int val; //和flag联合决定返回值
}

给个例子:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

现在,如果命令行的参数是-a 123,那么调用getopt_long()将返回字符'a',并且将字符串123由optarg返回(注意注意!字符串123由optarg带回!optarg不需要定义,在getopt.h中已经有定义),那么,如果命令行参数是-c,那么调用getopt_long()将返回字符'c',而此时,optarg是null。最后,当getopt_long()将命令行所有参数全部解析完成后,返回-1。

参数longopts,其实是一个结构的实例:


struct option {
const char *name; //name表示的是长参数名
int has_arg; //has_arg有3个值,no_argument(或者是0),表示该参数后面不跟参数值
// required_argument(或者是1),表示该参数后面一定要跟个参数值
// optional_argument(或者是2),表示该参数后面可以跟,也可以不跟参数值
int *flag;
//用来决定,getopt_long()的返回值到底是什么。如果flag是null,则函数会返回与该项option匹配的val值
int val; //和flag联合决定返回值
}

给个例子:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

现在,如果命令行的参数是-a 123,那么调用getopt_long()将返回字符'a',并且将字符串123由optarg返回(注意注意!字符串123由optarg带回!optarg不需要定义,在getopt.h中已经有定义),那么,如果命令行参数是-c,那么调用getopt_long()将返回字符'c',而此时,optarg是null。最后,当getopt_long()将命令行所有参数全部解析完成后,返回-1。
范例

#include <stdio.h>
#include <getopt.h>
char *l_opt_arg;
char* const short_options = "nbl:";
struct option long_options[] = {
{ "name", 0, NULL, 'n' },
{ "bf_name", 0, NULL, 'b' },
{ "love", 1, NULL, 'l' },
{ 0, 0, 0, 0},
};
int main(int argc, char *argv[])
{
int c;
while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
{
switch (c)
{
case 'n':
printf("My name is XL./n");
break;
case 'b':
printf("His name is ST./n");
break;
case 'l':
l_opt_arg = optarg;
printf("Our love is %s!/n", l_opt_arg);
break;
}
}
return 0;
}
[root@localhost wyp]# gcc -o getopt getopt.c
[root@localhost wyp]# ./getopt -n -b -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]#
[root@localhost liuxltest]# ./getopt -nb -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]# ./getopt -nbl forever
My name is XL.
His name is ST.
Our love is forever!

--结束END--

本文标题: 详细解析命令行的getopt_long()函数

本文链接: https://www.lsjlt.com/news/172614.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详细解析命令行的getopt_long()函数
    头文件 #include<getopt.h> 函数原型int getopt_long(int argc,char * const argv[],const char *o...
    99+
    2022-11-15
    getopt_long
  • linux中解析命令行选项getopt_long怎么用
    这篇文章给大家分享的是有关linux中解析命令行选项getopt_long怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux解析命令行选项getopt_long用法在程序中难免需要使用命令行选项,可以...
    99+
    2023-06-13
  • 详细解析let和const命令
    目录let命令基本用法特性暂时性死区不允许重复声明const特性补充——块级作用域let命令 基本用法 我们都知道let命令是用来声明变量的,类似于var,但...
    99+
    2022-11-13
  • C语言中main函数与命令行参数详细讲解
    目录一、main 函数的概念二、main 函数的本质命令行三、main 函数的参数四、main 函数一定是程序执行的第一个函数吗五、小结一、main 函数的概念 C语言中 main ...
    99+
    2022-11-13
  • pcre函数详细解析
    PCRE是一个NFA正则引擎,不然不能提供完全与Perl一致的正则语法功能。但它同时也实现了DFA,只是满足数学意义上的正则。 1. pcre_compile 原型:#include...
    99+
    2022-11-15
    pcre
  • Python命令行解析器argparse详解
    目录第1章 argparse简介1.1 解析1.2 argparse定义三步骤1.3  代码示例第2章 参数详解2.1 创建一个命令行解析器对象:ArgumentParse...
    99+
    2022-11-12
  • Pythonargparse解析命令行参数模块详情
    目录一、预备知识1、安装2、使用的一般步骤二、实操笔记1、函数详解1.1ArgumentParser1.2add_argument2、调用实例一、预备知识 argparse是pyth...
    99+
    2022-11-11
  • 命令执行漏洞超详细讲解
    💕💕💕 博主昵称:摆烂阳💕💕💕 🥰博主主页跳转链接 👩‍...
    99+
    2023-08-31
    服务器 网络 安全
  • Python命令行参数解析包argparse的使用详解
    目录一、argparse简介二、简单案例三、ArgumentParser参数四、add_argument指令参数解释五、vars()一、argparse简介 argparse 是 p...
    99+
    2022-11-11
  • Python内置函数详细解析
    目录1.abs2.all3.any4.callable5.dir6.id7.locals 和 globals8.hash9.sum10.getattr、setattr、delattr...
    99+
    2022-11-11
  • 详解Python命令行解析工具Argparse
    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具。 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题,尤其...
    99+
    2022-06-04
    命令行 详解 工具
  • linux命令ifconfig的详细解释
    这篇文章主要讲解了“linux命令ifconfig的详细解释”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux命令ifconfig的详细解释”吧!许多...
    99+
    2022-10-18
  • argparse——命令行参数解析
    目录 一、argparse是什么?1.1 一个🌰 二、ArgumentParser2.1 prog2.2 usage2.3 description2.4 epilog ...
    99+
    2023-09-17
    python 开发语言 命令行
  • Python中的命令行参数解析工具之docopt详解
    前言 docopt 是一个开源的库,代码地址:https://github.com/docopt/docopt。它在 README 中就已经做了详细的介绍,并且还附带了很多例子可供学习,这篇文章也是翻译一下...
    99+
    2022-06-04
    命令行 详解 参数
  • vector与map的erase()函数详细解析
    vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it) 这是vector的内部机制所造成的,所以对vector...
    99+
    2022-11-15
    vector erase
  • JavaScript中的回调函数详细解析
    以上就是JavaScript中的回调函数详细解析的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-23
    JavaScript
  • python命令行参数详解
    在Python中,可以通过命令行传递参数给脚本。这些参数可以在脚本内部使用,以便根据不同的输入执行不同的操作。Python命令行参数的详解:1、位置参数:在命令行中按照顺序传递给脚本的参数,它们可以在脚本内部通过位置来访问;2、命令行选项:...
    99+
    2023-12-18
    python 命令行
  • C++超详细讲解析构函数
    目录特性析构函数处理自定义类型编译器生成的默认析构函数特性 析构函数是特殊的成员函数 特征如下: 析构函数名是~类名;无参数无返回值;一个类有且只有一个析构函数;对象声明周期结束,编...
    99+
    2022-11-13
  • React Hook中的useState函数的详细解析
    useState => 让函数组件具有维持状态的能力useState 这个 Hook 是用来管理 state 的,它可以让函数组件具有维持状态的能力。即在一个函数组件的多次渲染...
    99+
    2022-11-13
    React Hook  useState函数 React Hook
  • linux下的tar命令详细解释
    tar命令 [root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指...
    99+
    2022-06-04
    命令 详细 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作