노트 - getopt 함수

에 기초 하 다,...http://jesserei.blog.163.com/blog/static/121411689200983081421390/ ,약간 수정 을 했 어 요.
일반적으로 리 눅 스 의 각종 명령 은 많은 명령 행 인 자 를 선택 할 수 있 습 니 다. 예 를 들 어 gcc - g - lm foo. c - o foo.  getopt () 는 명령 행 인 자 를 분석 하 는 함수 입 니 다.getopt 에 대해 계속 토론 하기 전에 옵션 (option) 과 옵션 매개 변수 (argument) 두 가지 개념 을 명 확 히 해 야 합 니 다.위의 예 에서 - g 중의 g, - o 중의 o 와 - lm 중의 l 은 옵션 이 고 - lm 중의 m 는 l 의 옵션 매개 변수 이 며 - o foo 중의 foo 는 o 의 옵션 매개 변수 입 니 다.따라서 우 리 는 옵션 이 두 가지 가 있다 는 것 을 알 게 되 었 다. 하 나 는 옵션 매개 변수 가 있 고 다른 하 나 는 옵션 매개 변수 가 없 는 것 이다.다음은 getopt () 에 대해 계속 토론 할 수 있 습 니 다.
우선 함수 설명: \ # include  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); getopt () 호출 할 때마다 옵션 을 되 돌려 줍 니 다.argc 와 argv 는 main 함수 의 두 가지 매개 변수 임 이 분명 하 다.문자열 optstring 은 다음 과 같은 요 소 를 포함 할 수 있 습 니 다. 하나의 문자, 문자 뒤에 하나의 콜론 설명 을 받 고 뒤에 하나의 옵션 매개 변 수 를 따 릅 니 다. 문자 뒤에 두 개의 콜론 설명 을 받 고 뒤에 있 으 나 마 나 한 옵션 매개 변 수 를 따 릅 니 다.예 를 들 어 옵션 문자 'x' 는 옵션 '- x', 옵션 문자 'x:' 는 옵션 과 그 매개 변수 '- x argument', 옵션 문자 'x:' 는 옵션 x 의 매개 변 수 를 선택 할 수 있 음 을 나타 낸다.GNU 가 추 가 된 것 으로 모든 유 닉 스 시스템 에서 사용 할 수 있 는 것 은 아니다).getopt () 의 반환 후 옵션 매개 변수 가 있 으 면 optarg 는 옵션 매개 변 수 를 가리 키 고 변 수 는 optind 에 다음 argv 매개 변 수 를 getopt () 다음 호출 색인 으로 포함 합 니 다.변수 optot 는 getopt () 에서 돌아 온 마지막 알려 진 옵션 을 저장 합 니 다.참수 열 이 끝 났 을 때 getopt () 함수 가 - 1 로 돌아 갑 니 다. 알 수 없 는 옵션 을 만 났 을 때 getopt 는 '?' 로 돌아 갑 니 다.매개 변수 열 에 있 는 옵션 에 대한 설명 은 '--' 취 소 될 수 있 습 니 다. getopt () 가 매개 변수 처리 에 종료 신 호 를 보 내 고 - 1 로 되 돌아 갈 수 있 습 니 다.예 를 들 어. / getopt - a - c - b foo getopt 의 소스 코드 는 아래 에 있 고 getopt 는 - a 로 만 설명 할 것 입 니 다.
다음은 간단 한 예 이다.
#include <stdio.h>
#include <unistd.h>

int main(int argc, char * argv[])
{
        int aflag=0, bflag=0, cflag=0;
        int ch;
        // opterr = 0;
        while ((ch = getopt(argc, argv, "ab:cd::")) != -1)
        {
                printf("optind: %d
", optind); switch (ch) { case 'a': printf("HAVE option: -a
"); aflag = 1; break; case 'b': printf("HAVE option: -b
"); bflag = 1; printf("The argument of -b is %s
", optarg); break; case 'c': printf("HAVE option: -c
"); cflag = 1; break; case 'd': printf("HAVE option: -d
"); printf("The argument of -d is %s
", optarg); cflag = 1; break; case '?': printf("Unknown option: %c
",(char)optopt); break; } } }

절차 가 매우 간단 하 니 여기 서 설명 하지 않 겠 다.
변수 opterr 와 optind 가 모두 1 로 초기 화 되 었 습 니 다.명령 행 의 앞의 매개 변 수 를 생략 하려 면 getopt () 를 호출 하기 전에 optind 를 다른 값 으로 설정 할 수 있 습 니 다.getopt () 에서 오류 정 보 를 출력 하지 않 으 려 면 전역 변 수 를 opterr 로 0 으로 설정 하면 됩 니 다.GNU Linux 에 서 는 getopt 에 해당 하 는 확장 자 를 제공 합 니 다. 예 를 들 어 "-- help" 와 같은 긴 매개 변 수 를 지원 합 니 다.주로 getopt 를 제 공 했 습 니 다.롱 함수, 아직 완전히 배우 지 못 했 습 니 다. 배 운 후에 다시 한 편의 단문 으로 그것 을 소개 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기