[리눅스 시스템 프로그래밍] 7.4 명령행 인자 활용하기, getopt 함수

앞에서 명령행 인자가 무엇인지 살펴보았습니다. 이번에는 명령행 인자를 효과적으로 활용하기 위해 제공하는 getopt 함수를 살펴볼게요.

#include <unistd.h >

int getopt(int argc, char *const argv[], const char *option);

반환 값: 해당 옵션의 아스키코드 값, 없을 때 EOF(-1)

extern char *optarg;

 
리눅스 시스템에서는 명령어에 옵션을 사용할 때 ‘-‘를 이용합니다. 여러분께서도 “ls -al”, “gcc -o ex ex.c”  등 옵션을 사용해 본 적이 있을 거예요.

 

이처럼 옵션을 분석할 수 있게 제공하는 시스템 호출이 getopt 함수입니다. getopt 함수에 첫 번째와 두 번째 인자는 main 함수의 argc와 arg를 그대로 전달하고 세 번째 option에 제공하고자 하는 옵션을 전달합니다. 만약 ‘a’, ‘l’ 옵션을 전달하고자 한다면 “al”이라고 전달합니다. 그리고 옵션 뒤에 인자를 사용해야 한다면 ‘:’을 추가합니다. 만약 ‘a’에는 옵션 뒤에 인자를 사용하고 ‘l’에는 옵션 뒤에 인자를 사용하지 않는다면 “a:l”을 전달합니다.

 

getopt 함수는 이번에 발견한 옵션의 아스키코드 값을 반환하며 옵션 뒤에 인자를 사용하고자 한다면 이미 선언한 optarg를 이용합니다. 그리고 더 이상 옵션을 발견하지 못하면 EOF를 반환합니다.

 

다음은 ‘a’와 ‘l’ 옵션을 사용하며 ‘a’ 옵션일 때에는 옵션 뒤에 인자를 사용하는 예제 코드입니다.

 

[그림 7.7] ex_opt 실행 화면
[그림 7.7] ex_opt 실행 화면