t 使用getopt改寫main函式

2021-09-11 22:28:20 字數 3170 閱讀 4966

一、執行ees_test

原始的輸入方式

a. 首先進入可執行檔案所在的目錄

cd /home/lihaoliang/eclipse-workspace/nichebreadth/default

b. 執行可執行檔案,並附帶引數

./nichebreadth /home/lihaoliang/ees_test scenario.seed_1.dispersal_good.nb_medium /home/lihaoliang/ees_test/results 64000 1 1 1

表1: 引數列表

numpara

value

1base_folder

/home/lihaoliang/ees_test

2scenario_config

scenario.seed_1.dispersal_good.nb_medium

3result_folder

/home/lihaoliang/ees_test/results

4memory_limit(in m)

64000

5is_overwrite16

with_detail17

is_sqlite

1使用get_optlong()函式

numpara

value

預設值1

base_folder

b/home/lihaoliang/ees_test

2scenario_config

escenario.seed_1.dispersal_good.nb_medium

3result_folder

r/home/lihaoliang/ees_test/results

4memory_limit(in m)

m64000

5is_overwritev1

6with_detaild1

7is_sqlites1

code

int

main

(int argc,

char

*ar**)

,// 1

,// 2

,// 3

,// 4

,// 5

,// 6

,// 7,}

;char base_folder[

100]

;char scenario_id[

100]

;char result_folder[

100]

;unsigned

long memory_limit =

64000

;bool is_overwrite =1;

bool with_detail =1;

bool is_sqlite =1;

while

((opt =

getopt_long

(argc,ar**,optstring,longopts,

&option_index))!=

-1)switch

( opt )

else

break;}

case

'v':

// is_overwrite

printf

("optarg=%s\n"

,optarg )

; temp =

atoi

(optarg)

;printf

("temp=%d\n"

, temp);if

(temp ==0)

break

;case

'd':

// with_detail

temp =

atoi

(optarg);if

(temp ==0)

break

;case

's':

// is_sqlite

temp =

atoi

(optarg);if

(temp ==0)

break

;case

'h':

/* fall-through is intentional */

case

'?':

display_usage()

;break

;case0:

/* long option without a short arg */

printf

("err!\n");

break

;default

:/* you won't actually get here. */

break;}

}printf

("\n*\nresult\n*\n");

printf

("base_folder: %s\n"

, base_folder )

;printf

("scenario_config: %s\n"

, scenario_id )

;printf

("result_folder: %s\n"

, result_folder )

;printf

("memory_limit: %ld\n"

, memory_limit )

;printf

("is_overwrite: %d\n"

, is_overwrite )

;printf

("with_detail: %d\n"

, with_detail )

;printf

("is_sqlite: %d\n"

, is_sqlite )

;return exit_success;

}

先定框架,在不斷細節化!

改變後指令

./nichebreadth ./nichebreadth -b /home/lihaoliang/ees_test -e scenario.seed_1.dispersal_good.nb_medium -r /home/lihaoliang/ees_test/results -m 64000 -v 1 -d 1 -s 1

用getopt處理main函式的引數

在c語言中,main函式的宣告如下 int main int argc,char argv argc是指程式引數的個數,包括程式名本身,如果程式不帶引數,argc為1 argv的每個陣列元素存放乙個程式引數,程式名存放在argv 0 例如 ls l 此時,argc為2,argv 0 是ls,argv...

getopt 函式的使用

每一天你都在使用大量的命令列程式,是不是感覺那些命令列引數用起來比較方便,他們都是使用getopt來實現的。在linux下使用getopt寫程式是一種比較方便的事情,下面來簡單的介紹一下getopt的使用。在討論引數處理之前,我們先明確兩個概念 選項 選項引數 gcc g o test test.c...

C函式getopt使用

getopt 分析命令列引數 相關函式表頭檔案 include 定義函式 int getopt int argc,char const argv const char optstring 函式說明 getopt 用來分析命令列引數。引數argc和argv是由main 傳遞的引數個數和內容。引數opt...