Ads 468x60px

##EasyReadMore##

27 12月, 2016

[c] getopt 為程式加上選項

Example:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define VERSION  "0.1"

void main(int argc,char *argv[]){
 int c;
 extern char *optarg;
 extern int optind, opterr, optopt;
 
 while((c = getopt(argc,argv,"vhf:")) != -1){
  switch(c){
   case 'v':
    printf("version: %s\n",VERSION);
   break;
   case 'f':
    puts(optarg);
   break;
   case ':':
    printf("check your parameter file\n");
    break;
   case 'h':
   case '?':
    printf("-v: version\n-f: -f filename filename\n");
   break;
  }
 }
 for(;optind<argc;optind++)
 {
     puts(argv[optind]); //像是這樣
 }
}
vh : 代表後面可以接的參數
可以 ./a.out -v or ./a.out -vh 都可以

程式如果這樣下的話
./a.out -f

a.out: option requires an argument -- 'f' 因為後面少了檔名~

'?'則代表這參數錯誤

‘f:'表示f之後需要有個額外的參數, 在處理的時候可以透過optarg來使用這額外的參數

那如果有時候只想接檔名呢 如
./a.out text.txt


這樣的話 可以在上面的while迴圈之後用argv[optind]來抓text.txt

如果是複數的檔名 如想用成 ./a.out text.txt text2.txt
可以加入下面
for(;optind<argc;optind++)
{
    puts(argv[optind]); //像是這樣
}

最終可用成這樣
./a.out -vf GW_agent.out GW_agent.out
version: 0.1
-v: version
GW_agent.out
GW_agent.out
C語言 getopt用法 @ 卡卡的程式部落格 :: 痞客邦 PIXNET :: - https://goo.gl/I4lTbF

0 意見:

張貼留言

 
Blogger Templates