千家信息网

linux中解析命令行选项getopt_long怎么用

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章给大家分享的是有关linux中解析命令行选项getopt_long怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux解析命令行选项getopt_long
千家信息网最后更新 2025年12月01日linux中解析命令行选项getopt_long怎么用

这篇文章给大家分享的是有关linux中解析命令行选项getopt_long怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

linux解析命令行选项getopt_long用法
在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。
下面介绍使用getopt_long解析命令行选项。
程序中主要使用:
短选项 长选项 是否需要参数 备注
-v --version 否 查询版本号
-n --name 是(用户名) 指定使用者
-d --debug 否 是否已测试
1、函数出处

代码如下:


[cpp]
#include //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);


2、参数介绍
argc argv :直接从main函数传递而来
shortopts:短选项字符串。如"n:v",这里需要指出的是,短选项字符串不需要‘-’,而且但选项需要传递参数时,在短选项后面加上":"。
longopts:struct option 数组,用于存放长选项参数。
longind:用于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL
下面介绍struct option

代码如下:


[cpp]
struct option
{
const char *name;//长选项名
int has_arg;//是否需要参数
int *flag;
int val;
};


name:长选项名字
has_arg:是否需要参数。值有三种情况

代码如下:


[cpp]
# define no_argument 0 //不需要参数
# define required_argument 1 //必须指定参数
# define optional_argument 2 //参数可选


flag 和val
flag和val相互依赖,主要分两种情况:
(1)、flag为NULL,val值用于确定该长选项,所以需要为长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁。
(2)、flag不为NULL,则将val值存放到flag所指向的存储空间,用于标识该长选项出现过。
3、返回值
程序中使用短选项,则返回短选项字符(如‘n'),当需要参数是,则在返回之前将参数存入到optarg中。
程序中使用长选项,返回值根据flag和val确定。当flag为NULL,则返回val值。所以根据val值做不同的处理,这也说明了val必须唯一。当val值等于短选项值,则可以使用短选项解析函数解析长选项;当flag不为NULL,则将val值存入flag所指向的存储空间,getopt_long返回0
出现未定义的长选项或者短选项,getopt_long返回?
解析完毕,getopt_long返回-1
4、实例
理论要与实际相结合

代码如下:


[cpp]
#include
#include
#include //getopt_long()头文件位置

int main(int argc, char** argv)
{
const char *optstring="n:v";
int c,deb,index;
struct option opts[]={{"username",required_argument,NULL,'n'},
{"version",no_argument,NULL,'v'},
{"debug",no_argument,&deb,1},
{0,0,0,0}};
while((c=getopt_long(argc,argv,optstring,opts,&index))!=-1)
{
switch(c)
{
case 'n'://-n 或者 --username 指定用户名
printf("username is %s\n",optarg);
break;
case 'v'://-v 或者--version,输出版本号
printf("version is 0.0.1 \n");
break;
case 0://flag不为NULL
printf("debug is %d\n",deb);
break;
case '?'://选项未定义
printf("?\n");
break;
default:
printf("c is %d\n",c);
break;
}
}
return 0;
}


运行截图:

说明一下:getopt_long_only,这个函数功能与getopt_long相同,只是可以使用’-‘后面跟长选项名,如./main -username jackie

感谢各位的阅读!关于"linux中解析命令行选项getopt_long怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

参数 命令 代码 函数 程序 字符 位置 内容 字符串 情况 指向 数组 文件 更多 版本 用户 用户名 空间 篇文章 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发技术培训费用 网络安全建设调研 数据库启用登录失败处理功能 广东生鲜类的软件开发 杭州网络安全审计安装通知 顺义区多功能网络技术 数据库设计三大原理 我的世界四叶草服务器ip地址 怎么查看服务器数据库日志 软件开发如何能准确抓住需求 青海社区智慧养老软件开发 ncre 数据库技术 检查网吧网络安全告知书 青少年网络安全插画海报 网络安全大赛就是打游戏吗 局域网是否需要服务器 概述不同类型软件开发过程 重庆软件开发入门学习哪里好 江苏现代软件开发近期价格 俄乌冲突中的军事网络安全 由于连接服务器次数过多 密码明文放在数据库安全吗 网络技术发展史年味变淡 2022网络安全意识测试 类似于超星的数据库 无线网络技术原理及应用笔记 数据库防火墙限制怎么设置 怎么进服务器的任务管理器 服务器管理界面叫什么 网络安全工程师很严格
0