Linux 命令列引數分析

2021-06-02 01:57:15 字數 2201 閱讀 2228

在實際程式之中我們經常要對命令列引數進行分析. 比如我們有乙個程式a可以接受許多引數.乙個可能的情況是 

a -d print --option1 hello --option2 world 

那麼我們如何對這個命令的引數進行分析了?.經常用函式是getopt和getopt_long. 

#include 

#include 

int getopt(int argc,char const **argv, const char *optstring);

int getopt_long(int argc,char const **argc, const char *optstring,const struct option *longopts, int *longindex);

extern char *optarg; 

extern int optind,opterr,optopt;

struct option ;

getopt_long是getopt的擴充套件.

象*** -h host --password 123456這種命令,程式設計時,如何方便的取得命令列引數?有乙個很好的方法,就是呼叫getopt()。

函式定義:

#include

int getopt(int argc, char * const argv,

const char *optstring);

extern char *optarg;

extern int optind, opterr, optopt;

#define _gnu_source

#include

int getopt_long(int argc, char * const argv,

const char *optstring,

const struct option *longopts,

int *longindex);

int getopt_long_only(int argc, char * const argv,

const char *optstring,

const struct option *longopts,

int *longindex);

getopt()函式是用來解析命令列引數的。這裡,主要解釋getopt_long()。

getopt_long()的頭兩引數,argc和argv分別是傳遞給main()的引數的個數和引數陣列(和main()的argc和argv是乙個概念)。

getopt_long()中,optstring是乙個字串,表示可以接受的引數。例如,"a:b:cd",表示可以接受的引數是a,b,c,d,其中,a和b引數後面

getopt_long()中,引數longopts,其實是乙個結構的例項:

struct option

給個例子:

struct option long_options = ,,}

現在,如果命令列的引數是-a 123,那麼呼叫getopt_long()將返回字元'a',並且將字串123由optarg返回(注意注意!字串123由optarg帶

回!optarg不需要定義,在getopt.h中已經有定義)

那麼,如果命令列引數是-c,那麼呼叫getopt_long()將返回字元'c',而此時,optarg是null。

最後,當getopt_long()將命令列所有引數全部解析完成後,返回-1。

看來,我說的有點混亂,那麼,看個例子,我相信,**最能說明問題:

#include

#include

#include

#include

int main( int argc, char **argv ),,

}int opt;

printf("starting... ");

while((opt = getopt_long(argc, argv, "a:c", long_options, null)) != -1)

}printf("end... ");

return 0;

}編譯後,假設生成a.out,可以試驗一下。

./a.out -a hello -c

輸出:starting...

it's a!

string of a:hello

it's c!

end...

這個程式不難,一下子就能看明白。

C 命令列引數分析

include include intgetopt intargc,char const argv,const char optstring 選項字串為 of h p o表示是無引數選項 f p都為有引數選項 h 後面可以跟引數或者不跟 此函式影響的全域性變數有四個 extern char opta...

getopt 函式 分析命令列引數

標頭檔案 include 定義函式 int getopt int argc,char const argv,const char optstring 函式說明 getopt 用來分析命令列引數。1 引數argc 和argv 是由main 傳遞的引數個數和內容。2 引數optstring 則代表欲處理...

getopt()函式(分析命令列引數)

include int getopt int argc,char argv const char optstring getopt直接分析命令列引數,找到選項和選項引數以及運算元的準確位置。optstring裡存放需要識別的選項字元 如果該選項有引數,則後面加冒號 命令列字串個數。命令列裡的所有字串...