getopt () 함수 소개

   프로그래머 에 게 Liux 에서 가장 많이 사용 되 는 것 은 명령 행 을 통 해 프로그램 을 실행 하 는 것 입 니 다. 그러나 많은 사람들 이 명령 행 의 쓰기 형식 규범 을 잘 모 르 기 때문에 입력 이 잘못 되 었 을 때 셸 은 입력 오류 와 같은 정 보 를 알려 줍 니 다.
   우 리 는 스스로 명령 행 매개 변수 분석 프로그램 을 작성 할 수 있 지만, 사실은 Liux 는 관련 기능 을 실현 하 는 함 수 를 제공 합 니 다. 이 함 수 는 getopt 함수 입 니 다.
관련 함수 헤더 파일
       #include < unistd. h > 함수 원형 및 관련 외부 변수 성명
       int getopt(int argc,  char* const argv[ ],  const char* optstring);
       extern char *optarg;    //옵션 뒤에 매개 변수 값 이 연결 되 어 있 으 면 optarg 는 이 매개 변수 값 을 가리 키 고 있 습 니 다.
       extern int optind,        //초기 화 값 은 1 이 고 다음 처리 할 인자 의 색인 으로 설정 되 었 습 니 다.getopt 의 진 도 를 기록 하 는 데 사용 합 니 다.
       extern int opterr,        //초기 화 값 이 1 입 니 다. opterr = 0 일 때 getopt 는 stderr 에 오류 정 보 를 출력 하지 않 습 니 다.
       extern int optopt;        //명령 행 옵션 문자 가 optstring 에 포함 되 지 않 거나 필요 한 인자 가 없 을 때,
                                         //이 옵션 은 optot 에 저 장 됩 니 다. getopt 는 '?'
함수 설명
      getopt () 는 명령 행 매개 변 수 를 분석 하 는 데 사 용 됩 니 다. 즉, 명령 행 매개 변수 중의 옵션 을 분석 하 는 데 사 용 됩 니 다.매개 변수 argc 와 argv 는 main () 이 전달 하 는 매개 변수 개수 와 내용 입 니 다.매개 변수 optstring 은 옵션 지정 문자열 을 표시 합 니 다.이 문자열 은 getopt 에 어떤 옵션 을 사용 할 수 있 는 지, 그리고 관련 값 이 있 는 지 알려 줍 니 다.getopt () 함 수 를 호출 할 때마다 옵션 을 되 돌려 줍 니 다. 이 옵션 에 인자 (연결 값) 가 있 으 면 optarg 는 이 인자 (연결 값) 를 가리 킵 니 다.
      함수 getopt () 는 optstring 에서 '-' 로 시작 하 는 문자 (주의! 문자열 이 아 닙 니 다!!) 가 명령 행 매개 변수 옵션 이 라 고 생각 합 니 다. 어떤 매개 변수 옵션 은 뒤에 매개 변수 값 을 따라 갈 수 있 습 니 다.optstring 의 형식 규범 은 다음 과 같 습 니 다.      1)   단일 문자, 표시 옵션,      2)   하나의 문자 뒤에 콜론 을 연결 합 니 다. ":"이 옵션 을 선택 하면 매개 변수 값 (연결 값) 과 연결 해 야 합 니 다.매개 변 수 는 옵션 뒤에 바짝 붙 거나 빈 칸 으로 구분 합 니 다.              열다이 매개 변수의 지침 은 optarg 에 부 여 됩 니 다.      3)   하나의 문자 뒤에 두 개의 콜론 이 있 습 니 다. ":"선택 가능 한 값 옵션 을 표시 합 니 다. 이 옵션 을 선택 하면 하나의 인자 와 함께 합 니 다.매개 변 수 는 옵션 뒤에 바짝 붙 어야 합 니 다. 비어 있 으 면 안 됩 니 다.              격 리이 매개 변수의 지침 은 optarg 에 부 여 됩 니 다.
      여기 서 '1ac: d::' 를 사례 로 설명 합 니 다. 그 중에서 1, a 는 값 이 없 는 매개 변수 옵션 입 니 다. c 는 값 이 있어 야 하 는 매개 변수 옵션 이 고 d 는 선택 가능 한 매개 변수 입 니 다.
실제 호출 에서 '- 1 - a - c cval - d',  '-1 -a -c cvalue -ddvalue',  '-1a - dvalue - c cvue '는 모두 합 법 적 입 니 다.여기 서 몇 가 지 를 주의해 야 합 니까?
1. 값 이 없 는 매개 변 수 는 연결 할 수 있 습 니 다. 1 과 a 는 값 이 없 는 매개 변수 입 니 다. - 1 - a 로 나 누 어 쓸 수도 있 고 - 1a 또는 - a1 로 연결 할 수도 있 습 니 다.
2. 매개 변 수 는 선후 순 서 를 가리 지 않 고 '- 1a - c cval - ddvalue' 와 '- d - c cval - a1' 의 분석 결 과 는 같 습 니 다.
3. 선택 할 수 있 는 매개 변수의 값 과 매개 변수 사이 에 빈 칸 이 있어 서 는 안 됩 니 다. - dvalue 라 는 형식 으로 써 야 합 니 다. - d dvalue 라 고 쓰 면...             형식 은 오 류 를 해석 할 수 있 습 니 다.
  4. 어떤 Liux 버 전 은 첫 번 째 비 옵션 매개 변수 에서 멈 추고 - 1 로 돌아 가 optind 의 값 을 설정 합 니 다.어떤 Liux 버 전 은 프로그램 에 나타 나 는 것 을 처리 할 수 있 습 니 다.      순서 매개 변수 중 임의의 위치 에 있 는 옵션 입 니 다. 이 경우 getopt 는 실제 argv [] 배열 을 다시 써 서 매개 변 수 를 모 았 습 니 다.
반환 값
      getopt () 호출 할 때마다 명령 행 에 들 어 오 는 인 자 를 한 번 씩 되 돌려 줍 니 다.
     인자 가 없 는 마지막 호출 시 getopt () 는 - 1 로 돌아 갑 니 다.
     optstring 에 없 는 매개 변 수 를 분석 하거나 필수 값 매개 변수 가 값 이 없 을 때 '?' 로 돌아 갑 니 다.
     optstring 이 ':' 로 시작 할 때 값 인자 가 부족 한 경우 ':' 가 아니 라 '?' 로 돌아 갑 니 다.
프로그램 범례
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int opt;
    while((opt = getopt(argc, argv, ":if:lr")) != -1) {
        switch(opt) {
        case 'i':
        case 'l':
        case 'r':
            printf("option: %c
", opt); break; case 'f': printf("filename: %s
", optarg); break; case ':': printf("option needs a value
"); break; case '?': printf("unknown option: %c
", optopt); break; } } for(; optind < argc; optind++) { printf("argument: %s
", argv[optind]); } exit(0); }

프로그램 출력
   $ ./argopt -i -lr 'hi there' -f fred.c -q
   option: i
   option: l
   option: r
   filename: fred.c
   unknown option: q
   argument: hi there

좋은 웹페이지 즐겨찾기