久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Linux C下的命令行參數解析

Linux C下(xia)的命令行參(can)數(shu)解析 時間:2018-09-27      來源:未知

C庫(ku)中(zhong)提(ti)供了相應(ying)的(de)函數接口供用戶解析(xi)命令行(xing)選(xuan)項,我們(men)常使(shi)用的(de)有(you)getopt_long_only和getopt_long,在(zai)使(shi)用的(de)方法上(shang)相差不大。

命令(ling)行選項(xiang)中一(yi)般可以選擇傳遞長選項(xiang)和短選項(xiang)

長(chang)選(xuan)項(xiang)的用法(fa)為: ./a.out --username bryant --help

短選項的用法為: ./a.out -n bryant -h -v

1. 函數接口

函數使(shi)用的頭(tou)文件為 #include

2. 參數介紹

? argc、argv : 從main函數傳遞而來。

? shortopts : 短選(xuan)項(xiang)(xiang)(xiang)字符串。如“n:v”,短選(xuan)項(xiang)(xiang)(xiang)字符串不需要(yao)"-",而且短選(xuan)項(xiang)(xiang)(xiang)需要(yao)傳遞參數時,在短選(xuan)項(xiang)(xiang)(xiang)后面加上":"。

一般使用的時(shi)候,定義(yi)一個空(kong)的shortopts即可。

? longopts : struct option 數組,用于(yu)存放長選(xuan)項參數。

struct option {

const char *name; //長選項(xiang)名

int has_arg; //是否需要參數

int *flag;

int val;

};

has_arg的值有三種(zhong)情況。

#define no_argument 0

#define required_argument 1

#define optional_argument 2

? longind : 用于(yu)返回長選項在longopts結構體數組中的索引(yin)值(zhi),用于(yu)調試。一般置(zhi)為NULL。

flag和val兩個值相互依賴,主要分兩種(zhong)情況。

(1) flag為NULL時,val值用(yong)于確定(ding)該(gai)長選(xuan)(xuan)(xuan)項,所以需要長選(xuan)(xuan)(xuan)項指定(ding)唯一的(de)val值。這里也為長選(xuan)(xuan)(xuan)項和短選(xuan)(xuan)(xuan)項建立了橋梁(liang)。

(2) flag不(bu)為(wei)NULL時,將(jiang)val值存放(fang)到flag所指(zhi)向(xiang)的(de)存儲空間,用于(yu)標識該(gai)長(chang)選項(xiang)出現過。

3. 返回值

? 程(cheng)序中使用短選項(xiang),則返回短選項(xiang)字(zi)符(fu),例如(ru)傳遞-n,如(ru)果需要參數(shu),則將參數(shu)保存在optarg中。!optarg不(bu)需要定義,在getopt.h中已經有定義

? 程序(xu)中使用長(chang)選項(xiang),則根(gen)據flag和(he)val的值(zhi)(zhi)確(que)定。當(dang)flag為NULL時,返(fan)回(hui)val值(zhi)(zhi)(val值(zhi)(zhi)必須唯一)。當(dang)value值(zhi)(zhi)等(deng)于短(duan) 選項(xiang)的值(zhi)(zhi)時,可以使用短(duan)選項(xiang)解析(xi)長(chang)選項(xiang);當(dang)flag不為NULL時,則將(jiang)val值(zhi)(zhi)存入flag所(suo)指(zhi)向的存儲空間(jian),此(ci)時getopt_long返(fan)回(hui)零。

? 出(chu)現(xian)未定義的長選項或短選項,則(ze)返回?

? 解析(xi)完畢,getopt_long返回 -1;

{"help", no_argument, 0, 0},

{"h", no_argument, 0, 0},

{0, 0, 0, 0}

};

while ((c = getopt_long_only(argc, argv, optstring, opts, &index)) != -1) {

printf("index = %d, c = %d\n", index, c);

switch (index) {

case 0:

case 1:

printf("username:%s\n", optarg);

break;

case 2:

case 3:

printf("version:1.0.0\n");

break;

case 4:

case 5:

printf("debug:yes\n");

break;

case 6:

case 7:

printf("help:?\n");

break;

default:

printf("other:%d\n", index);

break;

}

}

return 0;

}

如(ru)果(guo)使用如(ru)上的(de)(de)方式是將得到選項(xiang)(長(chang)選項(xiang)或短選項(xiang))在結構(gou)體數組中(zhong)的(de)(de)位置,并將該值存放在index中(zhong)。在while中(zhong)判定選項(xiang)的(de)(de)下標即可,如(ru)果(guo)需要(yao)獲(huo)得參數中(zhong)傳遞(di)的(de)(de)值,則(ze)將該值保存到optarg中(zhong)。

上圖的程序(xu)編譯(yi)之后,解析命令行選項(xiang)如(ru)下圖:

傳(chuan)遞短(duan)選項(xiang):

傳遞長選項:

長選(xuan)項(xiang)短選(xuan)項(xiang)混合:

使用這種(zhong)方式可以得到短(duan)選項的(de)字符值,用戶通過該值進行(xing)判斷。



        

傳遞短選項:

傳遞長選項:

上一篇:Android中Java與web通信

下一篇:Android內核和Linux內核的差別

熱點文章推薦(jian)
華清學員就業榜單
高薪(xin)學員經驗分享
熱點(dian)新聞推薦(jian)
前臺專線:010-82525158 企(qi)業培訓洽談專線(xian):010-82525379 院校合作洽(qia)談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部