getopt_long 用法

逆强化学习:从专家示范中学习策略 逆强化学习(Inverse Reinforcement Learning,简称IRL)是强化学习(Reinforcement Learning,简称RL)的一个子领域,它的目标是从专家的行为中学习策略。在传统的强化学习中,智能体通过与环境交互,根据奖励信号来学习一个策略。而在逆强化学习中,我们没有直接的奖励信号,而是通过观察专家的行为来推断出奖励函数,从而学习到一个与专家类似的策略。逆强化学习作为强化学习的一个重要子领域,在许多实际应用场景中都取得了显著的成功。 阅读详情
    Linux系统下,需要大量的命令行选项,如果自己手动解析他们的话实在是有违软件复用的思想,不过还好,GNU C library留给我们一个解析命令行的接口(X/Open规范),好好使用它可以使你的程序改观不少。

使用getopt_long()需要引入头文件

#include <getopt.h>

     现在我们使用一个例子来说明它的使用。

一个应用程序需要如下的短选项和长选项。


      短选项               长选项                           作用

      -h                      --help                           输出程序命令行参数说明然后退出
      -o filename        --output filename      给定输出文件名
      -v                      --version                       显示程序当前版本后退后

为了使用getopt_long函数,我们需要先确定两个结构:

1.一个字符串,包括所需要的短选项字符,如果选项后有参数,字符后加一个":"符号。本例中,这个字符串应该为"ho:v"。(因为-o后面有参数filename,所以字符后面要加":")

2.一个包含长选项字符串的结构体数组,每一个结构体包含4个域,第一个域为长选项字符串,第二个域是一个标识,只能为0或1,分别代表没有、有。 第三个域永远为NULL。第四个域为对应的短选项字符串。结构体数组的最后一个元素全部为NULL和0,标识结束。在本例中,它应该像一下的样子:

     const struct option long_options[] = {
         { "help",        0, NULL, 'h' },
         { "output",      1, NULL, 'o' },
         { "version", 0, NULL, 'v' },
         { NULL,          0, NULL, 0}
      };

调用时需要把main的两个参数argc和argv以及上述两个数据结构传给getopt_long。
每次调用getopt_long,它会解析一个符号,返回相应的短选项字符,如果解析完毕返回-1。所以需要使用一个循环来处理所有的参数,而相应的循环 里会使用switch语句进行选择。如果getopt_long遇到一个无效的选项字符,它会打印一个错误消息并且返回'?',很多程序会打印出帮助信息 并且中止运行;当getopt_long解析到一个长选项并且发现后面没有参数则返回':',表示缺乏参数。当处理一个参数时,全局变量optarg指向 下一个要处理的变量。当getopt_long处理完所有的选项后,全局变量optind指向第一个未知的选项索引。

这一个例子代码为下:

//编译使用gcc -o getopt_long getopt_long.c
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>

/*程序的名字*/
const char* program_name;

/* 打印程序参数 */
void print_usage (FILE* stream, int exit_code)
{
fprintf (stream, "Usage: %s options [ inputfile ... ]/n", program_name);
fprintf (stream, " -h --help                       显示这个帮助信息./n"
                             " -o --output filename 将输出定位到文件./n"
                             " -v --version                  打印版本信息./n");
exit (exit_code);
}


/* 主程序 */
int main (int argc, char* argv[])
{
int next_option;//下一个要处理的参数符号
int haveargv = 0;//是否有我们要的正确参数,一个标识
           
/* 包含短选项字符的字符串,注意这里的‘:’ */
          
const char* const short_options = "ho:v";
              
/* 标识长选项和对应的短选项的数组 */
              
const struct option long_options[] = {
                   { "help",        0, NULL, 'h' },
                   { "output",      1, NULL, 'o' },
                   { "version", 0, NULL, 'v' },
                   { NULL,         0, NULL, 0     }};//最后一个元素标识为NULL
                    
    /* 此参数用于承放指定的参数,默认为空 */
const char* output_filename = NULL;
/* 一个标志,是否显示版本号 */
int verbose = 0;

/* argv[0]始终指向可执行的文件文件名 */
                             
program_name = argv[0];
    
do
{
    next_option = getopt_long (argc, argv, short_options, long_options, NULL);
    switch (next_option)
    {
     case 'h':     /* -h or --help */    
       haveargv = 1;
       print_usage (stdout, 0);
     case 'o':     /* -o or --output */
         /* 此时optarg指向--output后的filename */
      output_filename = optarg;
      haveargv = 1;
      break;
     case 'v':     /* -v or    --version */
      verbose = 1;
      haveargv = 1;
      break;
     case ':':     /* 缺乏长选项内容 */
      break;

     case '?':     /* 出现一个未指定的参数*/
      print_usage (stderr, 1);
     case -1:      /* 处理完毕后返回-1 */
             if (!haveargv)
             {
                   print_usage (stderr, 1);
             }
      break;
     default:      /* 未指定的参数出现,出错处理 */
      print_usage (stderr, 1);
                                  break;
    }
}while (next_option !=-1);
                            
if (verbose)
{
    int i;
    for (i = optind; i < argc; ++i)
    printf ("Argument: %s/n", argv[i]);
}                           
                        
return 0;
}


原帖地址:http://hi.baidu.com/harite/blog/item/2ad9aaec43f87b3d2697913d.html
黑色的背景看得我十分崩溃,还是自己的blog舒服。
【绝对要收藏-优秀论文范文】高项-度量绩效域 摘要:本文基于某水库数字孪生平台建设项目(2022.9-2023.5,645.97万元)的管理实践,从信息系统度量绩效域角度展开论述。项目构建了包含防洪调度等6大子系统的数字平台,实现洪水"四预"功能。重点分析了度量绩效域的五大要点:制定有效指标(如成本±8%偏差阈值)、多维数据采集、预警临界值设定、基于趋势的主动干预和持续改进机制。特别阐述了绩效问题的诊断方法,包括设备采购全周期成本分析、阶段性成本报告制度等。项目状态展示采用三维可视化看板,集成进度、成本、质量等多维度实时数据,最终实 阅读详情

相关推荐

STM32CUBEMX | STM32L431RCT6的内部Flash操作

一、STM32CUBEMX配置 1、选择芯片型号: 2、配置时钟源 1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 2、 如果使用默认内部时钟(HSI),这一步可以略过; 3、配置时钟树 STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可: 4、代码生成设置 点击GENERATE CODE即可生成MDK-V5工程: 二、在MDK中编写、编译、下载用户代码 1、STM32内部Flash及HAL库API 查看所使用芯片的信息,

yongridada的博客 5568

getopt_long及其使用

  Linux系统下,需要大量的命令行选项,如果自己手动解析他们的话实在是有违软件复用的思想,不过还好,GNU C library留给我们一个解析命令行的接口(X/Open规范),好好使用它可以使你的程序改观不少。使用getopt_long()需要引入头文件#include     现在我们使用一个例子来说明它的使用。一个应用程序需要如下的短选项和长选项。     短选项   

strokeyang 939

告别纸上谈兵:在Xilinx Artix-7 FPGA上实测RGMII接口,从ILA抓包到PC Ping通全流程记录

本文详细记录了在Xilinx Artix-7 FPGA平台上实现RGMII接口的全过程,包括硬件配置、Vivado工程设置、双沿数据转换代码实现以及ILA波形分析。通过实测数据包捕获和PC端Ping测试,验证了千兆以太网通信的稳定性和可靠性,为工业通信网关等应用提供了实用参考。

weixin_33701251的博客 287

04. Getopt::Long::GetOptions

具体而言,Getopt::Long::GetOptions 模块的作用是解析命令行参数,使得你的 Perl 脚本能够识别和处理用户在命令行中提供的选项和参数。=s,代表获得options是个字符串,同时也要写入到字符串变量中,$input_file代表是引用$input_file,即传递指针。Getopt::Long::GetOptions 是 Perl 编程语言中的一个模块,用于处理命令行参数。通过使用这个模块,你可以轻松地从命令行中获取和解析用户提供的选项和参数。

qq_43053845的博客 711

DDS信号发生器设计避坑指南:从AD9834配置到巴特沃斯滤波实战

本文详细解析了基于AD9834芯片的DDS信号发生器设计中的关键技术要点与常见陷阱,涵盖时钟源选择、寄存器配置时序、巴特沃斯滤波器设计等核心内容。针对中高频段信号质量优化,提供了实用的解决方案和代码示例,帮助工程师规避设计误区,提升信号发生器的性能和稳定性。

2y3u4i5o6p的博客 782

合规批量下载美国上市公司年报数据的一些经验和总结

本文总结了使用Python脚本批量下载和处理美国上市公司SEC报告的技术经验。通过CIK代码查询SEC EDGAR系统,生成特定日期和报告类型的URL,并使用Selenium和Requests库下载报告内容。流程包括数据获取、文件下载、Excel处理和多线程优化,确保高效处理几百条数据。关键技术挑战包括SEC访问限制、动态网页内容和数据完整性,解决方案包括设置合规的User-Agent、使用Selenium模拟浏览器行为以及错误日志记录。最佳实践包括模块化设计、多线程优化和严格遵守SEC合规性。该自动化流程

jyfool的博客 1636

PERL参数指令技:Getopt::Long

#!/usr/bin/perl use Getopt::Long; Getopt::Long::GetOptions( 'page=i' => \$page, 'onoff!' => \$onoff, 'help|h' => \$wants_help,

No. Liu 1051

openclaw通俗入门系列6——记忆系统

记忆 = 智能体的笔记本,分长期(MEMORY.md)和每日(memory/日期.md)。只有写到文件里的才能记住!支持语义搜索(理解意思)+ 关键词搜索,还能自动在压缩前保存重要内容。

m0_60605453的博客 403

Perl Getopt::Long命令行参数传递

原文链接:https://www.javatpoint.com/perl-command-line-arguments The simple command line options are done using ?s option. Complex command line options are done using Getopt::Std and Getopt::Long. Getopt stands for GetOptions. It processes the content of @ARGV

hungtaowu的博客 521

《备考信息系统项目管理师》 - 专栏介绍和目录

本专栏会持续详细梳理软考高级信息系统项目管理师(高项)的考点、所有历年真题(包括综合知识、案例分析、论文)等,有论文专项,预测模拟题等内容。需要的可以先订阅下哦。

数据知道的博客 2万+

AI测试:手把手教你用AI做桌面自动化「喂饭教程」

本文介绍了基于MCP协议的DesktopCommanderMCP自动化工具,通过自然语言指令实现桌面操作。系统采用客户端-服务器架构,支持应用程序管理、文件操作、屏幕控制等功能。详细说明了环境搭建步骤,包括Python和Node.js依赖安装、API密钥配置及MCP服务部署。通过实战案例展示了文件整理、批量截图等典型应用场景,并分享了任务描述优化、权限控制等最佳实践。该方案能显著提升重复性桌面操作的效率,让AI成为智能办公助手。

blues_C的博客 851

linux 中解析命令行参数(getopt_long用法)optarg,optind

linux 中解析命令行参数(getopt_long用法)optarg,optind  (2012-05-30 17:48:51) 转载▼ 标签:  杂谈 分类: linux和C编程 getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下: #include int ge

lin364812726的专栏 3024

麒麟服务器操作系统QT系列软件工具手册

对Qt提供的开发工具进行了一系列的优化之后,在日常的修复bug和维护框架的过程中,桌面研发对Qt的基础软件库也进行了部分优化工作,包括qtbase、qtwayland、qtscript、qt4-x11等Qt基础组件,涉及的Qt框架版本主要涉及到5.9和5.12两个版本。qt 的翻译,是由 ts 文件生成 qm 文件然后进行翻译,国产操作系统上qt 的翻译是由单独的qttranslations包中进行维护,其次部分汉化问题也是qt组件维护工作的一部分,qt的翻译机制如图4-7所示。

太极淘的博客 543

getopt、getopt_long和getopt_long_only的用法

引子 前段时间博主曾写过一个Linux下的小项目叫myls,也就是实现了ls的基本功能。myls的命令行参数解析是由博主自己编码完成的,这可把博主给坑惨了!博主不久前查资料的时候看到了getopt、getopt_long和getopt_long_only这三个函数,发现这三个函数堪称命令行参数解析的“神器”!早知道有这样的工具,博主也不至于被命令行参数解析所困扰了。这么好的东西当然要分享给大家啦!所以博主写了这篇博客,也欢迎大佬指教! 用途 getopt、getopt_long和getopt_long_on

VincilLau的博客 881

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

getopt_long()用法详解

getopt_long() 目录 文件 函数原型 函数说明 范例 编辑本段文件 #include 编辑本段函数原型 int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *

四哥的专栏 2209

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[Perl] Getopt::Long模块用法

 阅读perldoc.perl.org是最好的掌握模块使用方式的途径。还是那句话,20%的内容能够满足80%的需求,所以这个只是简单描述Getopt::Long的用法。1.选项可以保存在标量里   my $verbose = ;    # option variable with default value (false)    my $all =

5842

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

getopt_long用法

<br /><br /> getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下:<br />   #include <getopt.h><br /><br />        int getopt_long(int argc, char * const argv[],<br />                   const char *optstring,<br />                   const struct option *lo

dongliqiang2006的专栏 846

Linux编程里getopt_long_only函数用法详解

在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项。 程序中主要使用: 短选项 长选项 是否需要参数 -n --username 是(用户名) 指定用户名 -d --debug 否 ...

pengrui18的专栏 1万+

getopt 和 getopt_long 基本用法【MAN GETOPT_LONG】

【代码】getopt 和 getopt_long 基本用法【MAN GETOPT_LONG】

Milu_Jingyu的博客 352

linux getopt_long函数,linux解析命令行选项getopt_long用法解读

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

weixin_42128015的博客 264

getopt_long函数用法

getopt_long函数的原型如下:(#include) getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); longopts是一个结构体类型,该结构体描述信息如下: struct optio

797

getopt_long用法及实例

GETOPT(3)                  Linux Programmer?. Manual                 GETOPT(3) NAME        getopt - Parse command-line options        翻译:getopt 解析命令行参数 SYNOPSIS        #include

Dalek的专栏 1018

getopt和getopt_long函数用法

getopt_long,getopt 介绍

朝气蓬勃 1315

getopt()和getopt_long()用法

getopt()和getopt_long()用法 2011-03-30 20:16 如果在LINUX环境下面你想做与用户交互的程序开发的话,这个函数我想会对你有很大的帮助!~ getopt用法 有关系统调用getopt: 声明:          #include          int getopt(int argc, char *con

1239

C语言中getopt()和getopt_long()函数的用法

一、命令行参数的使用 C程序的主函数有两个参数,其中,第一个参数是整型,可以获得包括程序名字的参数个数,第二个参数是字符数组指针或字符指针的指针,可以按顺序获得命令行上各个字符串参数。其原形是: int main(int argc, char *argv[]);或者是: int main(int argc, char **argv);比如在命令行输入: ./test hel

为幸福写歌的博客 1万+

getopt_long的用法

getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下:   #include        int getopt_long(int argc, char * const argv[],                   const char *optstring,                   const struct option

Phoenix_FuliMa 620
上一篇: 计算机网络(二)
下一篇: 程序设计语言编译原理
starshift
博客等级 码龄21年 66粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值