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

银河麒麟V10-ARM架构-postgresql安装与部署指南 本文详细介绍应用源码进行pgsql的安装步骤,本文以postgresql-12.0为例。提示:以下是本篇文章正文内容,下面案例可供参考银河麒麟系统安装程序比较繁琐,潜在问题比较多,个人建议均通过源码自定义编译安装。国产系统还需努力啊! 阅读详情

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;
}

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

相关推荐

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

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

. 440

命令行选项

请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,不含任何其他符号。在工具名字之后可能会包含若干选项(以减号”-”开头的字符串),还可能包含一些不是选项的参数(不以减号“-”开头的字符串)。   请写一个程序分析给出的命令行,输出命令行包含的不重复选项(即,重复的选项只输...

weixin_45726432的博客 1548

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

调节方波信号的占空比,也就是改变输出信号的高低电平时间比例,可以设置电容不同的充放电时间来达到目的,RP2可以使得电容具有不同的充放电时间,其中二极管起到限制电流流向的作用。假设U+>U,那么输出端就达到正向饱和,电容开始充电,当电容电压大于同相输入端电压时,此时电容开始放电,由此往复,从而产生方波信号。3,正反馈支路占优势,电路开始起振并不是稳定的,振荡会不断增大,最终将导致运放饱和,输出的波形是削波失真的正弦波。通常在电路中引入负反馈,例如使用负温度系数的热敏电阻,以自动稳定增益,防止输出波形失真。

XU157303764的博客 5212

(二)命令行选项

在第一部分,我们实现了一个“简单的命令行程序”-list,用于显示当前目录下的所有文件,文件名之间使用空格分隔。今天我们一起来增强下 “list” 命令行,给它传递选项

saltyfish's blog 499

linux命令描述语法

一、使用模式 一条描述命令用法的语句叫一条使用模式 一条使用模式以“Usage:”或者“用法:”开头,如下例: Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression] 用法:git [--version] [--help] [-C ] [-c =] [--exec-path[=]] [--html-path] [--man-path] [--info-path]

void的博客 1062

如何手动写一个命令行工具?

文章目录前言一、一个最简单的命令行工具二、命令行解析工具1.commander(1)option(2)version(3)command(4)argument2.co-prompt三、命令行美化提示依赖1.readline2.chalk3.figlet四、发布一个npm包1、执行get registry2、配置本地仓库3、执行`npm adduser`4、执行`npm publish`5、执行成功6、最后记得将本地仓库还原总结 前言 如何手动写一个命令行甚至说发布一个npm包,这涉及到所需要提供服务的接口

kkkokra的博客 1102

python设置命令行选项

添加2个位置参数, metavar参数是帮助中显示的参数名称,如图所示,初始化解析器时prog展示到usage中,但usage可自定义会覆盖默认内容;而version比较特殊,只要参数中包含了-V或--version,那只返回版本号,同-h。当然如果nargs改为+,代表【1-无数个】参数,即便给了default的值,也是必须传参的,可以尝试下。表格中其实少了第一位的参数,name or flags,是一个可变参数*args,可传入位置参数或可选参数,位置参数即前面无-字符,可选参数默认以-开头。

weixin_50652063的博客 1881

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

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

weixin_34306593的博客 162

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

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

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

corn8的博客 101

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的博客 816

c语言getopt解析命令行参数实例包括长参数与短参数

#include #include #include void get_option(int argc, char **argv) { char *cmd = argv[0]; while (1) { int option_index = 0; struct option long_option

折花刀的博客 3690

批处理编写进阶解读

#!/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...

情随事迁个人博客 260

命令行选项及参数

命令行选项及参数

m0_61212193的博客 1300

15.bash shell中自定义命令行选项与getopt/getopts

欢迎访问个人网络日志🌹🌹🌹🌹。

机器人视觉感知 1711

Windows 常用命令行

Windows 命令行提供了丰富多样的命令工具,涵盖了文件管理、网络管理、进程管理、系统信息查看、软件安装与管理、系统服务管理、注册表操作、性能监测与调优、压缩与解压缩、文本处理与编辑以及远程连接与管理等众多功能领域。熟练掌握这些命令对于 Windows 系统的高效管理、故障排查、性能优化以及自动化运维等工作具有至关重要的意义。

candy的博客 7957

命令行编程

记录入门安全开发的学习笔记,供日后回顾。命令行编程就是通过和用户交互 , 接收用户输入的数据,处理后,将结果反馈给用户。其中, -u、-D、-T、-columns 和 -batch 参数用于指定目标 URL 和要执行的操作。

m0_73783299的博客 1018

30天自制操作系统——第十七天制作命令行窗口

今天的任务是制作命令行窗口,那么命令行窗口应该是什么样呢? 在Windows系统里我们都使用过命令行窗口,它首先是黑底的,可以在里面输入各种字符、可以对输入的命令进行响应… 由于命令行窗口的制作用到的都是之前的知识点,难度并不大。由于修改的代码量较大,篇幅有限,就不把代码粘贴上来了,有兴趣的同学可以自行下载阅读。 这里主要记录一下制作命令窗口的关键步骤(本节没有什么新的知识点,可以直接跳过): 一、绘制命令行窗口 我们先在HariMain函数中画出一个命令行窗口的样子,命令行窗口一般就是黑底白字,可以对输入

mint1993的专栏 5270

每日一课 | 如何编写完美的Python命令行程序

作者 |Yannick Wolff译者 |弯月作为 Python 开发者,我们经常要编写命令行程序。比如在我的数据科学项目中,我要从命令行运行脚本来训练模型,以及计算算法的准确率等。...

sinat_32849897的博客 418

8D报告-8d报告.ppt

8D报告-8d报告

上一篇: Linux下获取虚拟地址对应的物理地址的方法
下一篇: 超简单的windows发包工具—小兵以太网测试仪
无忧老猪
博客等级 码龄17年 200粉丝 112原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值