国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux C下的命令行參數(shù)解析

Linux C下的命令行參數(shù)解析 時(shí)間:2018-09-27      來(lái)源:未知

C庫(kù)中提供了相應(yīng)的函數(shù)接口供用戶解析命令行選項(xiàng),我們常使用的有g(shù)etopt_long_only和getopt_long,在使用的方法上相差不大。

命令行選項(xiàng)中一般可以選擇傳遞長(zhǎng)選項(xiàng)和短選項(xiàng)

長(zhǎng)選項(xiàng)的用法為: ./a.out --username bryant --help

短選項(xiàng)的用法為: ./a.out -n bryant -h -v

1. 函數(shù)接口

函數(shù)使用的頭文件為 #include

2. 參數(shù)介紹

? argc、argv : 從main函數(shù)傳遞而來(lái)。

? shortopts : 短選項(xiàng)字符串。如“n:v”,短選項(xiàng)字符串不需要"-",而且短選項(xiàng)需要傳遞參數(shù)時(shí),在短選項(xiàng)后面加上":"。

一般使用的時(shí)候,定義一個(gè)空的shortopts即可。

? longopts : struct option 數(shù)組,用于存放長(zhǎng)選項(xiàng)參數(shù)。

struct option {

const char *name; //長(zhǎng)選項(xiàng)名

int has_arg; //是否需要參數(shù)

int *flag;

int val;

};

has_arg的值有三種情況。

#define no_argument 0

#define required_argument 1

#define optional_argument 2

? longind : 用于返回長(zhǎng)選項(xiàng)在longopts結(jié)構(gòu)體數(shù)組中的索引值,用于調(diào)試。一般置為NULL。

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

(1) flag為NULL時(shí),val值用于確定該長(zhǎng)選項(xiàng),所以需要長(zhǎng)選項(xiàng)指定唯一的val值。這里也為長(zhǎng)選項(xiàng)和短選項(xiàng)建立了橋梁。

(2) flag不為NULL時(shí),將val值存放到flag所指向的存儲(chǔ)空間,用于標(biāo)識(shí)該長(zhǎng)選項(xiàng)出現(xiàn)過(guò)。

3. 返回值

? 程序中使用短選項(xiàng),則返回短選項(xiàng)字符,例如傳遞-n,如果需要參數(shù),則將參數(shù)保存在optarg中。!optarg不需要定義,在getopt.h中已經(jīng)有定義

? 程序中使用長(zhǎng)選項(xiàng),則根據(jù)flag和val的值確定。當(dāng)flag為NULL時(shí),返回val值(val值必須唯一)。當(dāng)value值等于短 選項(xiàng)的值時(shí),可以使用短選項(xiàng)解析長(zhǎng)選項(xiàng);當(dāng)flag不為NULL時(shí),則將val值存入flag所指向的存儲(chǔ)空間,此時(shí)getopt_long返回零。

? 出現(xiàn)未定義的長(zhǎng)選項(xiàng)或短選項(xiàng),則返回?

? 解析完畢,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;

}

如果使用如上的方式是將得到選項(xiàng)(長(zhǎng)選項(xiàng)或短選項(xiàng))在結(jié)構(gòu)體數(shù)組中的位置,并將該值存放在index中。在while中判定選項(xiàng)的下標(biāo)即可,如果需要獲得參數(shù)中傳遞的值,則將該值保存到optarg中。

上圖的程序編譯之后,解析命令行選項(xiàng)如下圖:

傳遞短選項(xiàng):

傳遞長(zhǎng)選項(xiàng):

長(zhǎng)選項(xiàng)短選項(xiàng)混合:

使用這種方式可以得到短選項(xiàng)的字符值,用戶通過(guò)該值進(jìn)行判斷。



        

傳遞短選項(xiàng):

傳遞長(zhǎng)選項(xiàng):

上一篇:Android中Java與web通信

下一篇:Android內(nèi)核和Linux內(nèi)核的差別

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部