#include#includeintenable_opt_i;intenable_o" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

怎樣編寫支持命令行選項的程序

系統 1655 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;
}

怎樣編寫支持命令行選項的程序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产免费小视频 | 欧美成人综合在线 | 亚洲欧美国产日产综合不卡 | 久久91精品综合国产首页 | 久久天天躁狠狠躁夜夜躁 | 图片专区亚洲欧美另类 | 午夜欧美 | 国产在线中文字幕 | 国产在线视频h | 久热re国产手机在线观看 | 久久免费激情视频 | 日本一级特黄毛片免费视频9 | 精品国产成人高清在线 | 干美女网站 | 亚洲精品成人一区二区aⅴ 亚洲精品成人一区二区www | 欧美一级日本一级韩国一级 | 国产精品尹人在线观看免费 | 国产精品视频自拍 | 夜夜操网 | 成人嫩草研究院网站进 | 在线精品中文字幕福利视频 | 92精品国产自产在线观看 | 久久的精品99精品66 | 美国特级成人毛片 | 女人l8毛片a一级毛片免费 | 一级特黄aa大片一又好看 | 亚洲综合一区二区三区四区 | 97精品国产高清久久久久蜜芽 | 久草国产视频 | 国产成人高清视频免费播放 | 国产亚洲美女精品久久久2020 | 亚洲国产精品网 | 欧美伊香蕉久久综合类网站 | 黄色wwwwww | 国产精品亚洲欧美日韩区 | 欧美国产精品久久 | 亚洲国产精品成人午夜在线观看 | 亚洲一区二区三区首页 | 成人久久伊人精品伊人 | 污视频在线看网站 | 久久99国产精品亚洲 |