프로그래밍 정리/Ubuntu - C

[Ubuntu - 우분투 - C] 명령줄 옵션(1) - 짧은 옵션(getopt)

주누다 2015. 5. 15. 21:52
반응형

명령줄 옵션

- 명령줄에 나열된 인수는 두 종류로 분류

- 하나는 명령이 처리할 대상인 데이터
- 다른 하나는 명령의 동작을  지정하는데에 이용


명령줄 문자열 예

ex) gcc list0612A.c -o list0612A

=> gcc(명령어) list0612A.c(처리 대상) -o(옵션) list0612A(옵션의 인수)


옵션 지정 예

- 보통 '-h'나 '-?', '--help', '--usage' 같은 옵션

 => 간단한 도움말이나 명령의 사용법을 표시하는데 이용

- '--version' 을 지정했을 때 버전 번호를 표시하게 구현하는 것이 일반적으로 약속처럼 되어 있음



옵션 해석

- 프로그램에서  옵션을 해석하는 법

- 명령줄 옵션을 해석할 때는 'getopt()'와 'getopt_long()'을 사용

- 이들 함수가 표준 C 라이브러리에 포함되므로 따로 패키지를 준비할 필요는 없음

 => #include <unistd.h>




짧은 옵션

-'-(하이픈)'에 이어서 영문자, 숫자, 기호 단일 자로 나타내는 옵션 형식

- gcc 옵션에서 '-c' 와 '-o'가 짧은 옵션에 해당함

- '-c' 옵션은 그 자제로 완결돼 인수가 필요하지 않음

- 생성할 실행 파일의 이름을 지정하는 '-o' 옵션은 입수가 필요함

- 옵션의 인수는 옵션 문자에 바로 붙여서 지정하거나 공백으로 구별해서 지정



 긴 옵션

- '--help' 처럼 '--(하이픈 두 개)'에 이어서 단어로 표현하는 옵션 형식

- 긴 옵션의 인수는 '--longopt=argument' 처럼 '=' 로 연결해 지정하는 것이 관례


dd


 짧은 옵션 예제

 

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

void usage(char* cmd)
{
        fprintf(stderr, "usage: \n");
        fprintf(stderr, " %s -h  : show help\n", cmd);
        fprintf(stderr, " %s -b  : say good-bye\n", cmd);
        fprintf(stderr, " %s -n <name> : greeting to <name>\n", cmd);
}

int main(int argc, char* argv[])
{
        int opt;
        char* greeting = "Hello, ";
        char* target = "world";

        while((opt = getopt (argc, argv, "bhn:")) != -1)
        {
                switch(opt)
                {
                        case 'b':

                                greeting = "Good-bye, ";
                                break;
                        case 'n':
                                target = optarg;
                                break;
                        case 'h':
                        default :
                                usage(argv[0]);
                                return EXIT_FAILURE;
                }
        }
        printf("%s%s!\n", greeting, target);
        return EXIT_SUCCESS;
}

- 'getopt()' 를 사용하려면 헤더 파일 'unistd.h'  가 있어야 함

- 헤더파일 'stdlib.h' 는 EXIT_FAILURE와 EXIT_SUCCESS 를 사용하기 위해 포함

- 'while' 문이 핵심

- 'getopt()' 는 배열 argv[] 를 차례대로 해석하고, 끝까지 해석을 마치면 '-1' 을 반환

- '-1' 을 반환하는 시점에 while 문의 루프도 종료


- 'getopt()' 의 첫 번째, 두 번째 인수로 main() 에 주어지는 'argc'와 'argv'를 그대로 전달

- 세 번째 인수( "bhn:" )는 옵션으로 올 수 있는 문자열을 지정

- '-b', '-h', '-n' 세 종류의 옵션이 오므로 옵션을 나타내는 문자열을 지정

- n 뒤에 이어지는 ' : ' 은 옵션 '-n'이 인수가 필요하다는 것을 나타냄

- 만약 '-b'도 인수가 필요하다면 세 번재 인수로 'b:hn:' 이라는 문자열을 지정


- 옵션이 해석되면 'getopt()' 의 반환값으로 해당 옵션의 문자 코드를 얻을 수 있음

- 'optarg' 는 외부 변수로 정의되는 char 포인터 변수로, 옵션인 수를 나타내는 문자열을 가리킴

- 이 예제에서는 'argv[]'  의 내용을 그대로 이용하는 점에 주의




반응형