標籤:style blog color for io div
getopt被用來解析命令列選項參數。
#include <unistd.h>
extern char *optarg; //選項的參數指標
extern int optind, //下一次調用getopt的時,從optind儲存的位置處重新開始檢查選項。
extern int opterr, //當opterr=0時,getopt不向stderr輸出錯誤資訊。
extern int optopt; //當命令列選項字元不包括在optstring中或者選項缺少必要的參數時,該選項儲存在optopt 中,getopt返回‘?’
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 5 #ifdef RDP2 6 #define VNCOPT "V:Q" 7 #else 8 #define VNCOPT "V:" 9 #endif10 11 int main(int argc, char **argv) 12 { 13 int ch, i; 14 opterr = 0;15 16 while ((ch = getopt(argc,argv, VNCOPT ":a:bcde::f"))!=-1) 17 { 18 printf("optind:%d,opterr:%d\n", optind, opterr); 19 switch(ch) 20 { 21 case ‘V‘:22 printf("option V:‘%s‘\n",optarg);23 break; 24 case ‘a‘: 25 i = strtol(optarg, NULL, 16);26 printf("i = %x\n", i); 27 printf("option a:‘%s‘\n",optarg); 28 break; 29 case ‘b‘: 30 printf("option b :b\n"); 31 break; 32 case ‘e‘:33 printf("option e:‘%s‘\n",optarg);34 break; 35 default: 36 printf("other option :%c\n",ch); 37 } 38 }39 for(int i = 0; i < argc; i++)40 printf("argv[%d] = [%s]\n", i, argv[i]);41 printf("argc = [%d]\n", argc); 42 printf("optopt +%c\n",optopt); 43 44 return 1;45 }
執行結果:
$ ./getopt -a 123 -bcd -e 456i = 123option a:‘123‘optind:3,opterr:0option b :boptind:3,opterr:0other option :coptind:3,opterr:0other option :doptind:4,opterr:0option e:‘456‘optind:6,opterr:0argv[0] = [./getopt]argv[1] = [-a]argv[2] = [123]argv[3] = [-bcd]argv[4] = [-e]argv[5] = [456]argc = [6]optopt +eoptind = 6
argv 數組儲存命令列字串(包含./getopt執行程式)
argc 命令列字串個數(./getopt -a 123 -bcd -e 456) 6個
optind 下一次調用getopt的時,從optind儲存的位置處重新開始檢查選項。從0開始計算
(對應下面位置)
./getopt -a 123 -bcd -e 456
0 1 2 3 4 5 6