getopt如何用

1 getopt()用法

       #include <unistd.h>
       int getopt(int argc, char * const argv[],
                  const char *optstring);
       extern char *optarg;
       extern int optind, opterr, optopt;

這個函數是用來解析命令行的選項的。可是,只能解析短選項,什麼是短選項?就是-d這種只有一個-的,並且是隻有一個字母的。數組

首先要注意幾個外部變量optarg,optind,opterr。函數

opterr設置爲0時,當解析命令出錯也不向標準輸出打印任何信息。ui

optarg是當前解析到的選項的後面帶的參數,特別注意必須使用空格來間隔掉選項和後面的值。-d 100,切記只用空格,不要用=。並且getopt只可以解析那些在optstring參數中後面帶有了:的選項,如"abcd:"。spa

optind 是指向char *argv[]數組中的當前被處理的參數的下一個位置的指標。能夠看做是逾尾指針的性質。命令行

參數詳解:optstring這個參數就是用來配置選項參數的。"abcd:",冒號就表示能夠帶參數。指針

返回值:這個函數直接返回當前解析的短選項的名字,如命令行中爲-d,那麼這裏返回字符d。若是當前全部參數所有解析完,那麼此次調用返回-1。通常getopt()函數調用就放在while的判斷條件中,直到返回值爲-1時爲止。code

2 getopt_long()函數

       #include <getopt.h>

       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_long()函數能夠解析帶有長選項參數,如--prefix=/boot/等等,可是若是要禁止使用短參數,則必須將optstring參數設置爲空字符串「」。字符串

參數詳解:get

longopts 指向struct option結構體數組的第一個元素的指針。注意這個數組的最後一個元素必須是用全0來填充{0,0,0,0}。這個結構體定義在<getopt.h>中。下面看下這個結構體:string

        struct option {
               const char *name;   //這個長選項的名字
               int         has_arg; // 這個長選項可攜帶的參數的狀況,no_argument (or 0  不帶參數),required_argument (or 1  須要參數),optional_argument (or 2  可選參數,可帶可不帶)
               int        *flag;  // 這個成員比較複雜。1 若是設爲NULL,那麼getopt_long()函數直接返回val的值
               int         val;   //                2 若是不爲NULL,那麼getopt_long()函數直接返回0,同時,name表示的選項有的話就將val的值賦值給flag指針指向的int變量,name選項沒有的話,flag指向的變量維持原狀。
           };

3 getopt_long_only()函數與getopt_long的區別

getopt_long_only函數,它與getopt_long函數使用相同的參數表,在功能上基本一致。

    getopt_long只將--name看成長參數,那麼對於-name直接當成-n -a -m -e 去解析。

    getopt_long_only會將--name和-name兩種選項都看成長參數來匹配,那麼對於-name先當作--name來處理,不能匹配時,纔去解析爲-n -a -m -e。

相關文章
相關標籤/搜索