如何编写支持命令行选项的程序

MySQL程序之:在命令行上使用选项 要在语句中使用引号,您必须逃逸内部引号,或者在语句中使用不同于用于引用语句本身的引号类型的引号。例如,如果您的命令处理器支持用单引号或双引号引用,您可以在语句周围使用双引号,并为语句中的任何引用值使用单引号。例如,可以将--申请人(或-e)选项与mysql一起使用,将一个或多个以分号分隔的SQL语句传递给服务器。使用此选项时,mysql执行选项值中的语句并退出。选项参数以一个破折号或两个破折号开头,取决于它是选项名称的短形式还是长形式。是指示MySQL程序显示其帮助消息的选项的短形式和长形式。 阅读详情

Linux下的程序,经常支持N多的命令行选项。那么,我们如何编写支持命令行选项的程序呢。

下面给出两个示例。


示例1,简单的命令行选项。

下面的程序,支持4个选项, -i,-n,-s,-d

编译后,可以这样执行 (选项之间的顺序无所谓):

 ./a.out   -i  -n 100  -s hahaha  -d

好了,下面是代码。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>


int enable_opt_i;
int enable_opt_d;
int int_para_n;
char *str_para_s;


void parse_args(int argc, char *argv[])
{
   int opt;
    while ((opt = getopt(argc, argv, "iIn:s:d")) != -1)
    {
       switch (opt)
       {
           case 'i':
           case 'I':
               enable_opt_i = 1;
               break;
               
           case 'n':    
               int_para_n = atoi(optarg);
               break;
               
           case 's':    
               str_para_s = optarg;
               break;

           case 'd':    
               enable_opt_d = 1;
               break;

           default: /* '?' */
               printf("Usage: %s [-<i/I>] [-n number] [-s string] [-d]\n",
                       argv[0]);
       }
    }


}

int main(int argc, char *argv[])
{
    parse_args(argc, argv);


    printf("enable_opt_i = %d\n",enable_opt_i);
    printf("enable_opt_d = %d\n",enable_opt_d);
    printf("int_para_n   = %d\n",int_para_n  );
    printf("str_para_s   = %s\n",str_para_s  );
    
    return 0;
}


示例二,长选项(同时混合了简单选项)。

下面的程序,支持7个选项, -i,-n,-s,-d,--opt_a, --opt_b,--opt_c

编译后,可以这样执行 (选项之间的顺序无所谓):

 ./a.out   -i  -n 100  -s hahaha  -d  --opt_a   --opt_b=95555  --opt_c=cmbbank

好了,下面是代码。


#define _GNU_SOURCE


#include <stdio.h>
#include <unistd.h>
#include <getopt.h>
#include <stdlib.h>


int enable_opt_i;
int enable_opt_d;
int int_para_n;
char *str_para_s;


#define    LONG_OPT_A_ID    (1000)
#define    LONG_OPT_B_ID    (1001)
#define    LONG_OPT_C_ID    (1002)


int enable_long_opt_a;
int long_int_para_b;
char *long_str_para_c;


struct option my_options[] =
    {
        {"opt_a",  no_argument,       NULL, LONG_OPT_A_ID},
        {"opt_b",  required_argument, NULL, LONG_OPT_B_ID},
        {"opt_c",  required_argument, NULL, LONG_OPT_C_ID},
        {0},
    };


void parse_args(int argc, char *argv[])
{
   int opt;
    while ((opt = getopt_long(argc, argv, "iIn:s:d", my_options, NULL)) != -1)
    {
       switch (opt)
       {
           case 'i':
           case 'I':
               enable_opt_i = 1;
               break;
               
           case 'n': 
               int_para_n = atoi(optarg);
               break;
               


           case 's': 
               str_para_s = optarg;
               break;


           case 'd':    
               enable_opt_d = 1;
               break;


           case LONG_OPT_A_ID:
               enable_long_opt_a = 1;
               break;


           case LONG_OPT_B_ID:
               long_int_para_b = atoi(optarg);
               break;


           case LONG_OPT_C_ID:
               long_str_para_c = optarg;
               break;




           default: /* '?' */
               printf("Usage: %s [-<i/I>] [-n number] [-s string] [-d] [--opt_a] [--opt_b=number] [--opt_c=string]\n",
                       argv[0]);
       }
    }


}


int main(int argc, char *argv[])
{
    parse_args(argc, argv);


    printf("enable_opt_i = %d\n",enable_opt_i);
    printf("enable_opt_d = %d\n",enable_opt_d);
    printf("int_para_n   = %d\n",int_para_n  );
    printf("str_para_s   = %s\n",str_para_s  );


    printf("enable_long_opt_a = %d\n",enable_long_opt_a);
    printf("long_int_para_b   = %d\n",long_int_para_b  );
    printf("long_str_para_c   = %s\n",long_str_para_c  );


    return 0;
}

MySQL程序之:影响选项文件处理的命令行选项 例外情况是,客户端程序读取. mylogin.cnf登录路径文件(如果存在),即使使用--no-default,除非设置了--no-login-path。因此,对于所示命令,mysql从其他选项文件中读取[client]和[mysql],并从登录路径文件中读取[client]、[mysql]和[mypath]。因为这些选项会影响选项文件处理,所以它们必须在命令行中给出,而不是在选项文件中给出。即使使用了--no-default选项,客户端程序也会读取登录路径文件,除非设置了--no-login-path。 阅读详情

相关推荐

Verdi命令行调用选项用法

命令行调用Verdi平台 如果没有指定manage.rc资源文件,则库设置从novas.rc资源文件里面load; 支持load verilog的压缩文件gzipped(*.gz); 如果编译的门级设计因为ECO修改使用了nECO模块,则不能使用-ssy,-ssz和-ssv选项。 命令行使用方法: verdi [General Options] [nTrace Options] [Simulator Options] [Siloti Options] [Environment Options]

m0_67393619的博客 6131

命令行基础—简单命令的使用

简单了解一下ls, cat, mv, touch这四个命令的简单使用。

CY_WINT的博客 1678

使用boost::program_options模块编写支持自定义选项语法的测试程序

本文将介绍如何使用boost::program_options模块编写一个支持自定义选项语法的测试程序,并提供相应的源代码。通过boost::program_options模块,我们可以轻松地定义和解析自定义选项语法,以处理命令行参数。如果有任何疑问,请随时提问。这样,我们就成功地使用boost::program_options模块编写了一个支持自定义选项语法的测试程序。指定选项的类型,并将解析结果存储到变量中,我们可以方便地处理命令行选项。在上面的代码中,我们首先包含了必要的头文件,并使用了命名空间。

ByteWhizX的博客 163

怎样学习Windows下命令行编写

第四:powershell命令用好get-command|select-string "关键词"用来查找所需的命令名称以及"get-help 命令 -online"用来查看命令在线文档,文档是英文的,可以找在线翻译翻一下。第三:cmd命令使用help查看命令列表或“一串带参数的命令 /?"(不包括双引号)查看命令语法和例子。第二:必须要用好help或/?命令,这个命令是最基本的也是最常用的命令列表和语法查看命令。第五:用命令做一些简单功能的小工具,一方面是练手,一方面可以用来提高工作效率。

humors221的专栏 770

Python中的命令行参数解析详解

接下来,我们需要定义命令行参数的规格,即期望的选项和参数。每个选项都由一个短选项和长选项组成,还可以指定是否需要参数。它是一个简单而强大的工具,可以帮助我们轻松解析和处理命令行参数。你可以根据自己的需要定义不同的选项和参数,并在程序中处理它们。循环遍历选项和参数的列表,并根据不同的选项执行相应的操作。函数返回两个值:一个是选项和参数的列表,另一个是无法识别的选项和参数的列表。它可以帮助我们定义和解析命令行参数,以及处理参数的取值和错误情况。是一个带参数的选项,用于指定输出文件的路径。选项后面需要一个参数。

. 448

3、Linux系统编程基础:从简单C程序到命令行选项解析与手册查询

本文介绍了Linux系统编程的基础知识,包括如何编写简单的C程序进行整数求和、解析命令行选项以实现求和或相乘操作,以及如何使用Linux内置手册页查询相关信息。文章通过详细代码示例和操作步骤,帮助读者掌握Linux环境下基本的编程技巧和实用工具的使用。

corn8的博客 102

110.【C语言】编写命令行程序(1)

和以往写的程序有所不同,main函数里没有参数int main()//......return 0;但编写命令行程序时,main函数是有参数的!

zhangcoder的博客 记录学习轨迹~ 1474

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 514

怎样编写支持命令行选项的程序

Linux下的程序,常常支持N多的命令行选项。那么,我们怎样编写支持命令行选项的程序呢。 以下给出两个演示样例。 演示样例1,简单的命令行选项。 以下的程序,支持4个选项, -i,-n,-s,-d 编译后,能够这样运行 (选项之间的顺序无所谓):  ./a.out   -i  -n 100  -s hahaha  -d 好了,以下是代码。 #include &lt;s...

weixin_34306593的博客 165

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1136

STM32H750VBT6在Keil5下载失败?5步搞定Flash Download Failed Cortex-M7错误

本文针对STM32H750VBT6在Keil5中遇到的“Flash Download Failed - Cortex-M7”错误,提供了系统性的五步排查法。从硬件连接到驱动检查,再到核心的Flash算法配置、链接脚本核对,以及芯片保护状态等深度排查,帮助开发者快速定位并解决下载失败问题,尤其适用于处理内部Flash与外部QSPI Flash的混合应用场景。

weixin_29239279的博客 481

python编写程序的方式-Python编写带选项的命令行程序方法

运行python程序时,有时需要在命令行传入一些参数。常见的方式是在执行时,在脚本名后直接追加空格分隔的参数列表(例如 python test.py arg0 arg1 arg2),然后在脚本中就可以通过sys.argv获取所有的命令行参数。这种方式的优点是传参方便,参数获取简单;缺点是执行脚本时,必须知道参数的顺序,并且不能设置默认值,所有参数每次都必须传入。还有一种命令行传参方式是通过带选项的...

weixin_39866874的博客 356

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1576

Linux练习(处理程序命令行参数)

#include &lt;stdio.h&gt; #include &lt;unistd.h&gt; int main(int argc,char **argv) { int opt; while((opt=getopt(argc,argv,"if:lr"))!=-1) { switch(opt) ...

weixin_33858249的博客 410

YOLOv8改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 348

<PLC><socket><汇川>汇川PLC使用socket与其他控制器(如上位机)通讯模板程序示例

以上介绍了汇川PLC通用socket通讯的示例,事实上,汇川的官方手册也有使用示例,可以直接仿照使用,也可以加以修改。

用沸腾的热血,支付我们的人生吧! 3249

python - click - 命令行交互

click包,非常简单的命令行交互的包。 Click is a simple Python module inspired by the stdlib optparse to make writing command line scripts fun. Unlike other modules, it’s based around a simple API that does not come w...

chuckchen1222的博客 819

FPGA设计-Vivado的Off-Chip Termination设置问题

经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终端匹配怎么设置,Vivado的Off-Chip Termination设置问题,这里就详细说一下这个问题。

whm128的博客 2727

批处理编写进阶解读

#!/usr/bin/python3 import sys, getopt def main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"h:i:o:",["infile=","outfile="]) except getopt.Getop...

情随事迁个人博客 262

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MASM32编程分析、获取命令行参数

我们在执行应用程序时经常会指定命令行参数来传递程序运行所需要的数据,控制程序的执行。 高级程序设计语言会自动分析和提供命令行参数,而在汇编语言中,则要由我们DIY了。 下面是一个演示程序,我们先用Windows API函数GetCommandLine获取命令行,然后进行分析和显示。 源代码和可执行程序压缩包 CmdParam.rar(2KB) 可以到 http://download.csd...

caobihole 291

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

微软开源的命令行神器成 Windows 11 默认工具,网友:是时候彻底弃用 cmd 了!

Windows 用户的命令行工具要换“天”了,用开发者的评论来说:这一天终于来了! 众所周知,Windows 用户在使用命令行工具时,有多种选择,其中最常用的非 cmd 和 PowerShell 莫属。不过,随着 10 月 18 日 Windows Terminal 项目经理 Kayla Cinnamon 在官方博客上发布的一篇公告,Windows 11 中最常用的命令行工具可能要易主了。 公告指

夜风微凉的博客 653

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python编写命令行_Python编写带选项的命令行程序方法

运行python程序时,有时需要在命令行传入一些参数。常见的方式是在执行时,在脚本名后直接追加空格分隔的参数列表(例如 python test.py arg0 arg1 arg2),然后在脚本中就可以通过sys.argv获取所有的命令行参数。这种方式的优点是传参方便,参数获取简单;缺点是执行脚本时,必须知道参数的顺序,并且不能设置默认值,所有参数每次都必须传入。还有一种命令行传...

weixin_30043179的博客 386

python编写选项_Python编写带选项的命令行程序方法

运行python程序时,有时需要在命令行传入一些参数。常见的方式是在执行时,在脚本名后直接追加空格分隔的参数列表(例如 python test.py arg0 arg1 arg2),然后在脚本中就可以通过sys.argv获取所有的命令行参数。这种方式的优点是传参方便,参数获取简单;缺点是执行脚本时,必须知道参数的顺序,并且不能设置默认值,所有参数每次都必须传入。还有一种命令行传参方式是通过带选项的...

weixin_39639514的博客 223
上一篇: Linux下获取虚拟地址对应的物理地址的方法
下一篇: 超简单的windows发包工具—小兵以太网测试仪
无忧老猪
博客等级 码龄18年 200粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值