프로그램을 짜다 보면 시작시 인자를 받을 때가 많다.
이 인자는 argv를 통해서 받는데
소시적에는 이러한 인자의 순서를 정하고 이에 맞춰서 인자들이 제대로 들어왔는지를 하드코딩을 했다.
그건 물론 아무도 getopt을 쓰면 좀더 잘 짤 수 있다고 말해준 친구들이 없었기 때문이지만 ㅡ,ㅡ
간단하게 getopt을 사용하는 방법에 대해서 정리를 해보겠다.
참조는 man 3 getpot을 하면 된다.
*********************************************
include 해야하는 파일 : unistd.h
extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
extern int optreset;
int getopt(int argc, char * const argv[] , const char * optstring);
* optstring
optstring 은 커멘드에서 받는 옵션들의 문자들을 적는다.
옵션의 종류는 크게 두가지로 구분할 수 있다.
1) on / off 성 옵션들 : -h 등 옵션 문자만 온다
2) string 이 있는 옵션 : -a 123 등의 옵션과 옵션의 값이 존재한다. (-a 123 와 -a123) 은 동일하다.
어떤 옵션들을 받는다는 것을 정의하는 것이 optstring에 넣는 값이다.
1)과 같은 형태는 optstring에 "h" 라고 정의하면 되고, 2와 같은 형태는 "a:" 과 같이 :를 붙임으로써 뒤에 스트링을 받음을 명시한다.
여러개의 옵션들을 받을 경우도 있기 때문에 optstring 에 "ha:" 이렇게 받을 옵션들을 모두 나열하면 된다.
getopt() 이 리턴될 대 optarg에 어떤 옵션이 선택되었는지가 들어간다.
getopt() 함수가 -1을 리턴하면 전체 옵션이 모두 검사되었음을 표시한다.
#include <unistd.h>
static const char usgtxt[] =
"Usage : xxx [-h] [-a] [-b <string>] input file\n"
"Options:\n"
" - h print this help\n"
" - a set aaaaa\n"
" - b set string as bbbbbb\n";
int
main(int argc, char *argv[])
{
int opt;
while ((opt = getopt(argc, argv, "ab:h")) != -1)
switch (opt) {
case 'a':
// do assign
// flag option (on / off)
break;
case 'b':
// do assign
// string option
break;
case 'h':
fprintf(stderr, usgtxt);
exit(0);
}
argc -= optind;
argv += optind;
// do body
}
이 인자는 argv를 통해서 받는데
소시적에는 이러한 인자의 순서를 정하고 이에 맞춰서 인자들이 제대로 들어왔는지를 하드코딩을 했다.
그건 물론 아무도 getopt을 쓰면 좀더 잘 짤 수 있다고 말해준 친구들이 없었기 때문이지만 ㅡ,ㅡ
간단하게 getopt을 사용하는 방법에 대해서 정리를 해보겠다.
참조는 man 3 getpot을 하면 된다.
*********************************************
include 해야하는 파일 : unistd.h
extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
extern int optreset;
int getopt(int argc, char * const argv[] , const char * optstring);
* optstring
optstring 은 커멘드에서 받는 옵션들의 문자들을 적는다.
옵션의 종류는 크게 두가지로 구분할 수 있다.
1) on / off 성 옵션들 : -h 등 옵션 문자만 온다
2) string 이 있는 옵션 : -a 123 등의 옵션과 옵션의 값이 존재한다. (-a 123 와 -a123) 은 동일하다.
어떤 옵션들을 받는다는 것을 정의하는 것이 optstring에 넣는 값이다.
1)과 같은 형태는 optstring에 "h" 라고 정의하면 되고, 2와 같은 형태는 "a:" 과 같이 :를 붙임으로써 뒤에 스트링을 받음을 명시한다.
여러개의 옵션들을 받을 경우도 있기 때문에 optstring 에 "ha:" 이렇게 받을 옵션들을 모두 나열하면 된다.
getopt() 이 리턴될 대 optarg에 어떤 옵션이 선택되었는지가 들어간다.
getopt() 함수가 -1을 리턴하면 전체 옵션이 모두 검사되었음을 표시한다.
#include <unistd.h>
static const char usgtxt[] =
"Usage : xxx [-h] [-a] [-b <string>] input file\n"
"Options:\n"
" - h print this help\n"
" - a set aaaaa\n"
" - b set string as bbbbbb\n";
int
main(int argc, char *argv[])
{
int opt;
while ((opt = getopt(argc, argv, "ab:h")) != -1)
switch (opt) {
case 'a':
// do assign
// flag option (on / off)
break;
case 'b':
// do assign
// string option
break;
case 'h':
fprintf(stderr, usgtxt);
exit(0);
}
argc -= optind;
argv += optind;
// do body
}