getopt long 函式的作用

2021-04-13 12:01:14 字數 1845 閱讀 3583

linux系統下,需要大量的命令列選項,如果自己手動解析他們的話實在是有違軟體復用的思想,不過還好,gnu c library留給我們乙個解析命令列的介面(x/open規範),好好使用它可以使你的程式改觀不少。

使用getopt_long()需要引入標頭檔案

#include

現在我們使用乙個例子來說明它的使用。

乙個應用程式需要如下的短選項和長選項。

短選項               長選項                           作用

-h                      --help                           輸出程式命令列引數說明然後退出

-o filename        --output filename      給定輸出檔名

-v                      --version                       顯示程式當前版本後退後

為了使用getopt_long函式,我們需要先確定兩個結構:

1.乙個字串,包括所需要的短選項字元,如果選項後有引數,字元後加乙個":"符號。本例中,這個字串應該為"ho:v"。(因為-o後面有引數filename,所以字元後面要加":")

2.乙個包含長選項字串的結構體陣列,每乙個結構體包含4個域,第乙個域為長選項字串,第二個域是乙個標識,只能為0或1,分別代表沒有、有。第三個域永遠為null。第四個域為對應的短選項字串。結構體陣列的最後乙個元素全部為null和0,標識結束。在本例中,它應該像一下的樣子:

const struct option long_options = ,,,

};呼叫時需要把main的兩個引數argc和argv以及上述兩個資料結構傳給getopt_long。

每次呼叫getopt_long,它會解析乙個符號,返回相應的短選項字元,如果解析完畢返回-1。所以需要使用乙個迴圈來處理所有的引數,而相應的迴圈裡會使用switch語句進行選擇。如果getopt_long遇到乙個無效的選項字元,它會列印乙個錯誤訊息並且返回'?',很多程式會列印出幫助資訊並且中止執行;當getopt_long解析到乙個長選項並且發現後面沒有引數則返回':',表示缺乏引數。當處理乙個引數時,全域性變數optarg指向下乙個要處理的變數。當getopt_long處理完所有的選項後,全域性變數optind指向第乙個未知的選項索引。

這乙個例子**為下:

//編譯使用gcc -o getopt_long getopt_long.c

#include

#include

#include

/*程式的名字*/

const char* program_name;

/* 列印程式引數 */

void print_usage (file* stream, int exit_code)

/* 主程式 */

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

,};//最後乙個元素標識為null

/* 此引數用於承放指定的引數,預設為空 */

const char* output_filename = null;

/* 乙個標誌,是否顯示版本號 */

int verbose = 0;

/* argv[0]始終指向可執行的檔案檔名 */

program_name = argv[0];

dobreak;

default:      /* 未指定的引數出現,出錯處理 */

print_usage (stderr, 1);

break;

}}while (next_option !=-1);

if (verbose)

return 0;

}

getopt long 函式詳解

檔案 include 函式原型 int getopt long int argc,char const argv,const char optstring,const struct option longopts,int longindex 函式說明 getopt被用來解析命令列選項引數。getop...

Linux下getopt long函式的使用

getopt long為解析命令列引數函式,它是linux c庫函式。使用此函式需要包含系統標頭檔案getopt.h。getopt long函式宣告如下 int getopt long int argc,char const argv,const char optstring,const struc...

getopt函式和getopt long函式

預備知識 1.getopt getopt在unix下的命令列程式特別好用,特別是在你有許多引數要加入時。表頭檔案 i nclude 函式宣告 int getopt int argc,char const argv,const char optstring 函式說明 getopt 用來分析命令列引數。...