getopt_long函數學習筆記

來源:互聯網
上載者:User

1.標頭檔

#include <stdio.h><br />#include <stdlib.h><br />#include <unistd.h><br />#include <getopt.h>

2.函數原型

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

longindex參數如果沒有設定為NULL,那麼它就指向一個變數,這個變數會被賦值為尋找到的長選項在longopts中的索引值

 

3.全域符號

(1)

struct option {<br /> char *name;<br /> int has_arg;<br /> int *flag;<br /> int val;<br />};

一般每個長選項都對應一個短選項,兩者是等價的,option結構就是用來定義長選項對應哪個短選項,name表示長選項的名稱,val表示對應的短選項,比如{ "no-proxy", no_argument, NULL, 'N' },說明--no-proxy對應與-N。

has_arg可以取值如下:

no_argument 0 選項沒有參數

requierd_argument 1 選項需要參數

optional_argument 2 選項參數可選

比如我們可以定義如下選項:

static const struct option longopts[] = {<br /> { "no-proxy", no_argument, NULL, 'N' },<br /> { "output", required_argument, NULL, 'o' },<br /> { "user-agent", required_argument, NULL, 'U' },<br /> { "verbose", no_argument, NULL, 'v' },<br /> { "quiet", no_argument, NULL, 'q' },<br /> { "help", no_argument, NULL, 'h' },<br /> { "version", no_argument, NULL, 'V' },<br /> { NULL, no_argument, NULL, 0 }<br />};

(2)

extern char *optarg<br />extern int optind, optopt, opterr

假設使用下載工具axel:

axel -q --no-proxy --max-speed=150 http://blog.csdn.net/kenby/index.html

初始時,optind的值為1,指向第1個參數,每調用一次getopt_long,optind就向後移一個單位,指向第二個參數,這樣optind總是指向下一個要處理的參數,optarg表示參數的值,比如但處理max-speed時,optarg的值為150

 

4.函數傳回值

(1)若沒有命令列參數,返回-1

(2)若碰到匹配的短選項, 返回對應的字元,比如碰到-N, 返回'N',若碰到匹配的長選項,返回在option數組裡面定義的val,

比如碰到--no-proxy, 返回'N'。

(3)若碰到無法識別的短選項,返回-1, 若碰到無法識別的長選項,返回'?'

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.